- As of January 1, 2020 this library no longer supports Python 2 on the latest released version.
+
+ As of January 1, 2020 this library no longer supports Python 2 on the latest released version.
Library versions released prior to that date will continue to be available. For more information please
visit
Python 2 support on Google Cloud.
diff --git a/google/cloud/logging/gapic_version.py b/google/cloud/logging/gapic_version.py
index 14833215c..0677053cf 100644
--- a/google/cloud/logging/gapic_version.py
+++ b/google/cloud/logging/gapic_version.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright 2022 Google LLC
+# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "3.12.1" # {x-release-please-version}
+__version__ = "3.13.0" # {x-release-please-version}
diff --git a/google/cloud/logging_v2/gapic_version.py b/google/cloud/logging_v2/gapic_version.py
index 14833215c..0677053cf 100644
--- a/google/cloud/logging_v2/gapic_version.py
+++ b/google/cloud/logging_v2/gapic_version.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright 2022 Google LLC
+# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "3.12.1" # {x-release-please-version}
+__version__ = "3.13.0" # {x-release-please-version}
diff --git a/google/cloud/logging_v2/services/config_service_v2/async_client.py b/google/cloud/logging_v2/services/config_service_v2/async_client.py
index 5d904b5b9..1ecc59542 100644
--- a/google/cloud/logging_v2/services/config_service_v2/async_client.py
+++ b/google/cloud/logging_v2/services/config_service_v2/async_client.py
@@ -28,6 +28,7 @@
Type,
Union,
)
+import uuid
from google.cloud.logging_v2 import gapic_version as package_version
@@ -37,6 +38,7 @@
from google.api_core import retry_async as retries
from google.auth import credentials as ga_credentials # type: ignore
from google.oauth2 import service_account # type: ignore
+import google.protobuf
try:
@@ -2966,7 +2968,7 @@ async def sample_get_exclusion():
chargeable logs. Note that exclusions on
organization-level and folder-level sinks don't apply
to child resources. Note also that you cannot modify
- the \_Required sink or exclude logs from it.
+ the Required sink or exclude logs from it.
"""
# Create or coerce a protobuf request object.
@@ -3109,7 +3111,7 @@ async def sample_create_exclusion():
chargeable logs. Note that exclusions on
organization-level and folder-level sinks don't apply
to child resources. Note also that you cannot modify
- the \_Required sink or exclude logs from it.
+ the Required sink or exclude logs from it.
"""
# Create or coerce a protobuf request object.
@@ -3266,7 +3268,7 @@ async def sample_update_exclusion():
chargeable logs. Note that exclusions on
organization-level and folder-level sinks don't apply
to child resources. Note also that you cannot modify
- the \_Required sink or exclude logs from it.
+ the Required sink or exclude logs from it.
"""
# Create or coerce a protobuf request object.
@@ -3504,7 +3506,7 @@ async def sample_get_cmek_settings():
the Google Cloud organization.
See [Enabling CMEK for Log
- Router](\ https://cloud.google.com/logging/docs/routing/managed-encryption)
+ Router](https://cloud.google.com/logging/docs/routing/managed-encryption)
for more information.
"""
@@ -3618,7 +3620,7 @@ async def sample_update_cmek_settings():
the Google Cloud organization.
See [Enabling CMEK for Log
- Router](\ https://cloud.google.com/logging/docs/routing/managed-encryption)
+ Router](https://cloud.google.com/logging/docs/routing/managed-encryption)
for more information.
"""
@@ -4223,5 +4225,8 @@ async def __aexit__(self, exc_type, exc, tb):
gapic_version=package_version.__version__
)
+if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
+ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
+
__all__ = ("ConfigServiceV2AsyncClient",)
diff --git a/google/cloud/logging_v2/services/config_service_v2/client.py b/google/cloud/logging_v2/services/config_service_v2/client.py
index 39ee70613..fd8592220 100644
--- a/google/cloud/logging_v2/services/config_service_v2/client.py
+++ b/google/cloud/logging_v2/services/config_service_v2/client.py
@@ -32,6 +32,7 @@
Union,
cast,
)
+import uuid
import warnings
from google.cloud.logging_v2 import gapic_version as package_version
@@ -45,6 +46,7 @@
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
+import google.protobuf
try:
OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None]
@@ -3430,7 +3432,7 @@ def sample_get_exclusion():
chargeable logs. Note that exclusions on
organization-level and folder-level sinks don't apply
to child resources. Note also that you cannot modify
- the \_Required sink or exclude logs from it.
+ the Required sink or exclude logs from it.
"""
# Create or coerce a protobuf request object.
@@ -3570,7 +3572,7 @@ def sample_create_exclusion():
chargeable logs. Note that exclusions on
organization-level and folder-level sinks don't apply
to child resources. Note also that you cannot modify
- the \_Required sink or exclude logs from it.
+ the Required sink or exclude logs from it.
"""
# Create or coerce a protobuf request object.
@@ -3724,7 +3726,7 @@ def sample_update_exclusion():
chargeable logs. Note that exclusions on
organization-level and folder-level sinks don't apply
to child resources. Note also that you cannot modify
- the \_Required sink or exclude logs from it.
+ the Required sink or exclude logs from it.
"""
# Create or coerce a protobuf request object.
@@ -3956,7 +3958,7 @@ def sample_get_cmek_settings():
the Google Cloud organization.
See [Enabling CMEK for Log
- Router](\ https://cloud.google.com/logging/docs/routing/managed-encryption)
+ Router](https://cloud.google.com/logging/docs/routing/managed-encryption)
for more information.
"""
@@ -4068,7 +4070,7 @@ def sample_update_cmek_settings():
the Google Cloud organization.
See [Enabling CMEK for Log
- Router](\ https://cloud.google.com/logging/docs/routing/managed-encryption)
+ Router](https://cloud.google.com/logging/docs/routing/managed-encryption)
for more information.
"""
@@ -4678,5 +4680,7 @@ def cancel_operation(
gapic_version=package_version.__version__
)
+if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
+ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
__all__ = ("ConfigServiceV2Client",)
diff --git a/google/cloud/logging_v2/services/config_service_v2/transports/base.py b/google/cloud/logging_v2/services/config_service_v2/transports/base.py
index ffc848059..cbe76169c 100644
--- a/google/cloud/logging_v2/services/config_service_v2/transports/base.py
+++ b/google/cloud/logging_v2/services/config_service_v2/transports/base.py
@@ -26,6 +26,7 @@
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
+import google.protobuf
from google.cloud.logging_v2.types import logging_config
from google.longrunning import operations_pb2 # type: ignore
@@ -35,6 +36,9 @@
gapic_version=package_version.__version__
)
+if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
+ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
+
class ConfigServiceV2Transport(abc.ABC):
"""Abstract transport class for ConfigServiceV2."""
@@ -71,9 +75,10 @@ def __init__(
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
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
+ This argument is mutually exclusive with credentials. This argument will be
+ removed in the next major version of this library.
scopes (Optional[Sequence[str]]): A list of scopes.
quota_project_id (Optional[str]): An optional project to use for billing
and quota.
diff --git a/google/cloud/logging_v2/services/config_service_v2/transports/grpc.py b/google/cloud/logging_v2/services/config_service_v2/transports/grpc.py
index 8870e119c..4825151de 100644
--- a/google/cloud/logging_v2/services/config_service_v2/transports/grpc.py
+++ b/google/cloud/logging_v2/services/config_service_v2/transports/grpc.py
@@ -73,12 +73,11 @@ def intercept_unary_unary(self, continuation, client_call_details, request):
f"Sending request for {client_call_details.method}",
extra={
"serviceName": "google.logging.v2.ConfigServiceV2",
- "rpcName": client_call_details.method,
+ "rpcName": str(client_call_details.method),
"request": grpc_request,
"metadata": grpc_request["metadata"],
},
)
-
response = continuation(client_call_details, request)
if logging_enabled: # pragma: NO COVER
response_metadata = response.trailing_metadata()
@@ -155,9 +154,10 @@ def __init__(
are specified, the client will attempt to ascertain the
credentials from the environment.
This argument is ignored if a ``channel`` instance is provided.
- credentials_file (Optional[str]): A file with credentials that can
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
This argument is ignored if a ``channel`` instance is provided.
+ This argument will be removed in the next major version of this library.
scopes (Optional(Sequence[str])): A list of scopes. This argument is
ignored if a ``channel`` instance is provided.
channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]):
@@ -291,9 +291,10 @@ def create_channel(
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
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
+ This argument is mutually exclusive with credentials. This argument will be
+ removed in the next major version of this library.
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`.
diff --git a/google/cloud/logging_v2/services/config_service_v2/transports/grpc_asyncio.py b/google/cloud/logging_v2/services/config_service_v2/transports/grpc_asyncio.py
index 2686f80e3..4c5e96761 100644
--- a/google/cloud/logging_v2/services/config_service_v2/transports/grpc_asyncio.py
+++ b/google/cloud/logging_v2/services/config_service_v2/transports/grpc_asyncio.py
@@ -151,8 +151,9 @@ def create_channel(
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`.
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`. This argument will be
+ removed in the next major version of this library.
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`.
@@ -203,9 +204,10 @@ def __init__(
are specified, the client will attempt to ascertain the
credentials from the environment.
This argument is ignored if a ``channel`` instance is provided.
- credentials_file (Optional[str]): A file with credentials that can
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
This argument is ignored if a ``channel`` instance is provided.
+ This argument will be removed in the next major version of this library.
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`.
diff --git a/google/cloud/logging_v2/services/logging_service_v2/async_client.py b/google/cloud/logging_v2/services/logging_service_v2/async_client.py
index beb1891b5..89a290cf7 100644
--- a/google/cloud/logging_v2/services/logging_service_v2/async_client.py
+++ b/google/cloud/logging_v2/services/logging_service_v2/async_client.py
@@ -31,6 +31,7 @@
Type,
Union,
)
+import uuid
from google.cloud.logging_v2 import gapic_version as package_version
@@ -40,6 +41,7 @@
from google.api_core import retry_async as retries
from google.auth import credentials as ga_credentials # type: ignore
from google.oauth2 import service_account # type: ignore
+import google.protobuf
try:
@@ -338,10 +340,10 @@ async def sample_delete_log():
log_name (:class:`str`):
Required. The resource name of the log to delete:
- - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
- - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
- - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
+ - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
+ - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
+ - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
``[LOG_ID]`` must be URL-encoded. For example,
``"projects/my-project-id/logs/syslog"``,
@@ -464,10 +466,10 @@ async def sample_write_log_entries():
to all log entries in ``entries`` that do not specify a
value for ``log_name``:
- - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
- - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
- - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
+ - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
+ - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
+ - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
``[LOG_ID]`` must be URL-encoded. For example:
@@ -657,17 +659,17 @@ async def sample_list_log_entries():
Required. Names of one or more parent resources from
which to retrieve log entries:
- - ``projects/[PROJECT_ID]``
- - ``organizations/[ORGANIZATION_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]``
- - ``folders/[FOLDER_ID]``
+ - ``projects/[PROJECT_ID]``
+ - ``organizations/[ORGANIZATION_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]``
+ - ``folders/[FOLDER_ID]``
May alternatively be one or more views:
- - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
Projects listed in the ``project_ids`` field are added
to this list. A maximum of 100 resources may be
@@ -917,10 +919,10 @@ async def sample_list_logs():
parent (:class:`str`):
Required. The resource name to list logs for:
- - ``projects/[PROJECT_ID]``
- - ``organizations/[ORGANIZATION_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]``
- - ``folders/[FOLDER_ID]``
+ - ``projects/[PROJECT_ID]``
+ - ``organizations/[ORGANIZATION_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]``
+ - ``folders/[FOLDER_ID]``
This corresponds to the ``parent`` field
on the ``request`` instance; if ``request`` is provided, this
@@ -1263,5 +1265,8 @@ async def __aexit__(self, exc_type, exc, tb):
gapic_version=package_version.__version__
)
+if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
+ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
+
__all__ = ("LoggingServiceV2AsyncClient",)
diff --git a/google/cloud/logging_v2/services/logging_service_v2/client.py b/google/cloud/logging_v2/services/logging_service_v2/client.py
index bdd8783d3..692ed8ccf 100644
--- a/google/cloud/logging_v2/services/logging_service_v2/client.py
+++ b/google/cloud/logging_v2/services/logging_service_v2/client.py
@@ -34,6 +34,7 @@
Union,
cast,
)
+import uuid
import warnings
from google.cloud.logging_v2 import gapic_version as package_version
@@ -47,6 +48,7 @@
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
+import google.protobuf
try:
OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None]
@@ -753,10 +755,10 @@ def sample_delete_log():
log_name (str):
Required. The resource name of the log to delete:
- - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
- - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
- - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
+ - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
+ - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
+ - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
``[LOG_ID]`` must be URL-encoded. For example,
``"projects/my-project-id/logs/syslog"``,
@@ -876,10 +878,10 @@ def sample_write_log_entries():
to all log entries in ``entries`` that do not specify a
value for ``log_name``:
- - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
- - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
- - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
+ - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
+ - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
+ - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
``[LOG_ID]`` must be URL-encoded. For example:
@@ -1065,17 +1067,17 @@ def sample_list_log_entries():
Required. Names of one or more parent resources from
which to retrieve log entries:
- - ``projects/[PROJECT_ID]``
- - ``organizations/[ORGANIZATION_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]``
- - ``folders/[FOLDER_ID]``
+ - ``projects/[PROJECT_ID]``
+ - ``organizations/[ORGANIZATION_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]``
+ - ``folders/[FOLDER_ID]``
May alternatively be one or more views:
- - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
Projects listed in the ``project_ids`` field are added
to this list. A maximum of 100 resources may be
@@ -1322,10 +1324,10 @@ def sample_list_logs():
parent (str):
Required. The resource name to list logs for:
- - ``projects/[PROJECT_ID]``
- - ``organizations/[ORGANIZATION_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]``
- - ``folders/[FOLDER_ID]``
+ - ``projects/[PROJECT_ID]``
+ - ``organizations/[ORGANIZATION_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]``
+ - ``folders/[FOLDER_ID]``
This corresponds to the ``parent`` field
on the ``request`` instance; if ``request`` is provided, this
@@ -1678,5 +1680,7 @@ def cancel_operation(
gapic_version=package_version.__version__
)
+if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
+ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
__all__ = ("LoggingServiceV2Client",)
diff --git a/google/cloud/logging_v2/services/logging_service_v2/transports/base.py b/google/cloud/logging_v2/services/logging_service_v2/transports/base.py
index 7a08a140a..881a6df35 100644
--- a/google/cloud/logging_v2/services/logging_service_v2/transports/base.py
+++ b/google/cloud/logging_v2/services/logging_service_v2/transports/base.py
@@ -25,6 +25,7 @@
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
+import google.protobuf
from google.cloud.logging_v2.types import logging
from google.longrunning import operations_pb2 # type: ignore
@@ -34,6 +35,9 @@
gapic_version=package_version.__version__
)
+if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
+ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
+
class LoggingServiceV2Transport(abc.ABC):
"""Abstract transport class for LoggingServiceV2."""
@@ -71,9 +75,10 @@ def __init__(
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
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
+ This argument is mutually exclusive with credentials. This argument will be
+ removed in the next major version of this library.
scopes (Optional[Sequence[str]]): A list of scopes.
quota_project_id (Optional[str]): An optional project to use for billing
and quota.
diff --git a/google/cloud/logging_v2/services/logging_service_v2/transports/grpc.py b/google/cloud/logging_v2/services/logging_service_v2/transports/grpc.py
index 87d164a0d..8ed0e80d4 100644
--- a/google/cloud/logging_v2/services/logging_service_v2/transports/grpc.py
+++ b/google/cloud/logging_v2/services/logging_service_v2/transports/grpc.py
@@ -72,12 +72,11 @@ def intercept_unary_unary(self, continuation, client_call_details, request):
f"Sending request for {client_call_details.method}",
extra={
"serviceName": "google.logging.v2.LoggingServiceV2",
- "rpcName": client_call_details.method,
+ "rpcName": str(client_call_details.method),
"request": grpc_request,
"metadata": grpc_request["metadata"],
},
)
-
response = continuation(client_call_details, request)
if logging_enabled: # pragma: NO COVER
response_metadata = response.trailing_metadata()
@@ -154,9 +153,10 @@ def __init__(
are specified, the client will attempt to ascertain the
credentials from the environment.
This argument is ignored if a ``channel`` instance is provided.
- credentials_file (Optional[str]): A file with credentials that can
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
This argument is ignored if a ``channel`` instance is provided.
+ This argument will be removed in the next major version of this library.
scopes (Optional(Sequence[str])): A list of scopes. This argument is
ignored if a ``channel`` instance is provided.
channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]):
@@ -289,9 +289,10 @@ def create_channel(
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
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
+ This argument is mutually exclusive with credentials. This argument will be
+ removed in the next major version of this library.
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`.
diff --git a/google/cloud/logging_v2/services/logging_service_v2/transports/grpc_asyncio.py b/google/cloud/logging_v2/services/logging_service_v2/transports/grpc_asyncio.py
index f73ac1150..46fbec20c 100644
--- a/google/cloud/logging_v2/services/logging_service_v2/transports/grpc_asyncio.py
+++ b/google/cloud/logging_v2/services/logging_service_v2/transports/grpc_asyncio.py
@@ -150,8 +150,9 @@ def create_channel(
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`.
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`. This argument will be
+ removed in the next major version of this library.
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`.
@@ -202,9 +203,10 @@ def __init__(
are specified, the client will attempt to ascertain the
credentials from the environment.
This argument is ignored if a ``channel`` instance is provided.
- credentials_file (Optional[str]): A file with credentials that can
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
This argument is ignored if a ``channel`` instance is provided.
+ This argument will be removed in the next major version of this library.
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`.
diff --git a/google/cloud/logging_v2/services/metrics_service_v2/async_client.py b/google/cloud/logging_v2/services/metrics_service_v2/async_client.py
index 01ddfce89..7ca6059af 100644
--- a/google/cloud/logging_v2/services/metrics_service_v2/async_client.py
+++ b/google/cloud/logging_v2/services/metrics_service_v2/async_client.py
@@ -28,6 +28,7 @@
Type,
Union,
)
+import uuid
from google.cloud.logging_v2 import gapic_version as package_version
@@ -37,6 +38,7 @@
from google.api_core import retry_async as retries
from google.auth import credentials as ga_credentials # type: ignore
from google.oauth2 import service_account # type: ignore
+import google.protobuf
try:
@@ -1110,5 +1112,8 @@ async def __aexit__(self, exc_type, exc, tb):
gapic_version=package_version.__version__
)
+if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
+ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
+
__all__ = ("MetricsServiceV2AsyncClient",)
diff --git a/google/cloud/logging_v2/services/metrics_service_v2/client.py b/google/cloud/logging_v2/services/metrics_service_v2/client.py
index 6e7f0b056..7a43e3ddc 100644
--- a/google/cloud/logging_v2/services/metrics_service_v2/client.py
+++ b/google/cloud/logging_v2/services/metrics_service_v2/client.py
@@ -32,6 +32,7 @@
Union,
cast,
)
+import uuid
import warnings
from google.cloud.logging_v2 import gapic_version as package_version
@@ -45,6 +46,7 @@
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
+import google.protobuf
try:
OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None]
@@ -1526,5 +1528,7 @@ def cancel_operation(
gapic_version=package_version.__version__
)
+if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
+ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
__all__ = ("MetricsServiceV2Client",)
diff --git a/google/cloud/logging_v2/services/metrics_service_v2/transports/base.py b/google/cloud/logging_v2/services/metrics_service_v2/transports/base.py
index 0dd83b37b..22aad6790 100644
--- a/google/cloud/logging_v2/services/metrics_service_v2/transports/base.py
+++ b/google/cloud/logging_v2/services/metrics_service_v2/transports/base.py
@@ -25,6 +25,7 @@
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
+import google.protobuf
from google.cloud.logging_v2.types import logging_metrics
from google.longrunning import operations_pb2 # type: ignore
@@ -34,6 +35,9 @@
gapic_version=package_version.__version__
)
+if hasattr(DEFAULT_CLIENT_INFO, "protobuf_runtime_version"): # pragma: NO COVER
+ DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__
+
class MetricsServiceV2Transport(abc.ABC):
"""Abstract transport class for MetricsServiceV2."""
@@ -71,9 +75,10 @@ def __init__(
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
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
+ This argument is mutually exclusive with credentials. This argument will be
+ removed in the next major version of this library.
scopes (Optional[Sequence[str]]): A list of scopes.
quota_project_id (Optional[str]): An optional project to use for billing
and quota.
diff --git a/google/cloud/logging_v2/services/metrics_service_v2/transports/grpc.py b/google/cloud/logging_v2/services/metrics_service_v2/transports/grpc.py
index 57461b906..d5ca8fd0f 100644
--- a/google/cloud/logging_v2/services/metrics_service_v2/transports/grpc.py
+++ b/google/cloud/logging_v2/services/metrics_service_v2/transports/grpc.py
@@ -72,12 +72,11 @@ def intercept_unary_unary(self, continuation, client_call_details, request):
f"Sending request for {client_call_details.method}",
extra={
"serviceName": "google.logging.v2.MetricsServiceV2",
- "rpcName": client_call_details.method,
+ "rpcName": str(client_call_details.method),
"request": grpc_request,
"metadata": grpc_request["metadata"],
},
)
-
response = continuation(client_call_details, request)
if logging_enabled: # pragma: NO COVER
response_metadata = response.trailing_metadata()
@@ -154,9 +153,10 @@ def __init__(
are specified, the client will attempt to ascertain the
credentials from the environment.
This argument is ignored if a ``channel`` instance is provided.
- credentials_file (Optional[str]): A file with credentials that can
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
This argument is ignored if a ``channel`` instance is provided.
+ This argument will be removed in the next major version of this library.
scopes (Optional(Sequence[str])): A list of scopes. This argument is
ignored if a ``channel`` instance is provided.
channel (Optional[Union[grpc.Channel, Callable[..., grpc.Channel]]]):
@@ -289,9 +289,10 @@ def create_channel(
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
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
+ This argument is mutually exclusive with credentials. This argument will be
+ removed in the next major version of this library.
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`.
diff --git a/google/cloud/logging_v2/services/metrics_service_v2/transports/grpc_asyncio.py b/google/cloud/logging_v2/services/metrics_service_v2/transports/grpc_asyncio.py
index 01aa05771..5134c4c8a 100644
--- a/google/cloud/logging_v2/services/metrics_service_v2/transports/grpc_asyncio.py
+++ b/google/cloud/logging_v2/services/metrics_service_v2/transports/grpc_asyncio.py
@@ -150,8 +150,9 @@ def create_channel(
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`.
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`. This argument will be
+ removed in the next major version of this library.
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`.
@@ -202,9 +203,10 @@ def __init__(
are specified, the client will attempt to ascertain the
credentials from the environment.
This argument is ignored if a ``channel`` instance is provided.
- credentials_file (Optional[str]): A file with credentials that can
+ credentials_file (Optional[str]): Deprecated. A file with credentials that can
be loaded with :func:`google.auth.load_credentials_from_file`.
This argument is ignored if a ``channel`` instance is provided.
+ This argument will be removed in the next major version of this library.
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`.
diff --git a/google/cloud/logging_v2/types/log_entry.py b/google/cloud/logging_v2/types/log_entry.py
index e52f3085d..38ec6e184 100644
--- a/google/cloud/logging_v2/types/log_entry.py
+++ b/google/cloud/logging_v2/types/log_entry.py
@@ -214,10 +214,10 @@ class LogEntry(proto.Message):
Example values:
- - ``000000000000004a``
- - ``7a2190356c3fc94b``
- - ``0000f00300090021``
- - ``d39223e101960076``
+ - ``000000000000004a``
+ - ``7a2190356c3fc94b``
+ - ``0000f00300090021``
+ - ``d39223e101960076``
trace_sampled (bool):
Optional. The sampling decision of the trace associated with
the log entry.
diff --git a/google/cloud/logging_v2/types/logging.py b/google/cloud/logging_v2/types/logging.py
index 5b46a15e1..e06819a3b 100644
--- a/google/cloud/logging_v2/types/logging.py
+++ b/google/cloud/logging_v2/types/logging.py
@@ -51,10 +51,10 @@ class DeleteLogRequest(proto.Message):
log_name (str):
Required. The resource name of the log to delete:
- - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
- - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
- - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
+ - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
+ - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
+ - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
``[LOG_ID]`` must be URL-encoded. For example,
``"projects/my-project-id/logs/syslog"``,
@@ -79,10 +79,10 @@ class WriteLogEntriesRequest(proto.Message):
all log entries in ``entries`` that do not specify a value
for ``log_name``:
- - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
- - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
- - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
+ - ``projects/[PROJECT_ID]/logs/[LOG_ID]``
+ - ``organizations/[ORGANIZATION_ID]/logs/[LOG_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]``
+ - ``folders/[FOLDER_ID]/logs/[LOG_ID]``
``[LOG_ID]`` must be URL-encoded. For example:
@@ -224,17 +224,17 @@ class ListLogEntriesRequest(proto.Message):
Required. Names of one or more parent resources from which
to retrieve log entries:
- - ``projects/[PROJECT_ID]``
- - ``organizations/[ORGANIZATION_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]``
- - ``folders/[FOLDER_ID]``
+ - ``projects/[PROJECT_ID]``
+ - ``organizations/[ORGANIZATION_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]``
+ - ``folders/[FOLDER_ID]``
May alternatively be one or more views:
- - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
Projects listed in the ``project_ids`` field are added to
this list. A maximum of 100 resources may be specified in a
@@ -395,24 +395,24 @@ class ListLogsRequest(proto.Message):
parent (str):
Required. The resource name to list logs for:
- - ``projects/[PROJECT_ID]``
- - ``organizations/[ORGANIZATION_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]``
- - ``folders/[FOLDER_ID]``
+ - ``projects/[PROJECT_ID]``
+ - ``organizations/[ORGANIZATION_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]``
+ - ``folders/[FOLDER_ID]``
resource_names (MutableSequence[str]):
Optional. List of resource names to list logs for:
- - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
To support legacy queries, it could also be:
- - ``projects/[PROJECT_ID]``
- - ``organizations/[ORGANIZATION_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]``
- - ``folders/[FOLDER_ID]``
+ - ``projects/[PROJECT_ID]``
+ - ``organizations/[ORGANIZATION_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]``
+ - ``folders/[FOLDER_ID]``
The resource name in the ``parent`` field is added to this
list.
@@ -484,17 +484,17 @@ class TailLogEntriesRequest(proto.Message):
Required. Name of a parent resource from which to retrieve
log entries:
- - ``projects/[PROJECT_ID]``
- - ``organizations/[ORGANIZATION_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]``
- - ``folders/[FOLDER_ID]``
+ - ``projects/[PROJECT_ID]``
+ - ``organizations/[ORGANIZATION_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]``
+ - ``folders/[FOLDER_ID]``
May alternatively be one or more views:
- - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
- - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
+ - ``folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]``
filter (str):
Optional. Only log entries that match the filter are
returned. An empty filter matches all log entries in the
diff --git a/google/cloud/logging_v2/types/logging_config.py b/google/cloud/logging_v2/types/logging_config.py
index 6ed09222a..bfaec563f 100644
--- a/google/cloud/logging_v2/types/logging_config.py
+++ b/google/cloud/logging_v2/types/logging_config.py
@@ -350,9 +350,9 @@ class LogView(proto.Message):
Filters are restricted to be a logical AND of ==/!= of any
of the following:
- - originating project/folder/organization/billing account.
- - resource type
- - log id
+ - originating project/folder/organization/billing account.
+ - resource type
+ - log id
For example:
@@ -1300,14 +1300,14 @@ class UpdateSinkRequest(proto.Message):
the updated sink depends on both the old and new values of
this field:
- - If the old and new values of this field are both false or
- both true, then there is no change to the sink's
- ``writer_identity``.
- - If the old value is false and the new value is true, then
- ``writer_identity`` is changed to a unique service
- account.
- - It is an error if the old value is true and the new value
- is set to false or defaulted to false.
+ - If the old and new values of this field are both false or
+ both true, then there is no change to the sink's
+ ``writer_identity``.
+ - If the old value is false and the new value is true, then
+ ``writer_identity`` is changed to a unique service
+ account.
+ - It is an error if the old value is true and the new value
+ is set to false or defaulted to false.
update_mask (google.protobuf.field_mask_pb2.FieldMask):
Optional. Field mask that specifies the fields in ``sink``
that need an update. A sink field will be overwritten if,
diff --git a/noxfile.py b/noxfile.py
index b75e78ac3..16dca84d7 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -32,16 +32,15 @@
ISORT_VERSION = "isort==5.11.0"
LINT_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"]
-DEFAULT_PYTHON_VERSION = "3.8"
+DEFAULT_PYTHON_VERSION = "3.14"
UNIT_TEST_PYTHON_VERSIONS: List[str] = [
- "3.7",
- "3.8",
"3.9",
"3.10",
"3.11",
"3.12",
"3.13",
+ "3.14",
]
UNIT_TEST_STANDARD_DEPENDENCIES = [
"mock",
@@ -60,7 +59,7 @@
UNIT_TEST_EXTRAS: List[str] = []
UNIT_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = {}
-SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.12"]
+SYSTEM_TEST_PYTHON_VERSIONS: List[str] = [DEFAULT_PYTHON_VERSION]
SYSTEM_TEST_STANDARD_DEPENDENCIES: List[str] = [
"mock",
"pytest",
@@ -81,7 +80,12 @@
CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
nox.options.sessions = [
- "unit",
+ "unit-3.9",
+ "unit-3.10",
+ "unit-3.11",
+ "unit-3.12",
+ "unit-3.13",
+ "unit-3.14",
"system",
"cover",
"lint",
@@ -112,7 +116,7 @@ def lint(session):
session.run("flake8", "google", "tests")
-@nox.session(python=DEFAULT_PYTHON_VERSION)
+@nox.session(python="3.13")
def blacken(session):
"""Run black. Format code to uniform standard."""
session.install(BLACK_VERSION)
@@ -145,7 +149,7 @@ def format(session):
@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.install("setuptools", "docutils", "pygments")
session.run("python", "setup.py", "check", "--restructuredtext", "--strict")
@@ -184,8 +188,8 @@ def install_unittest_dependencies(session, *constraints):
)
def unit(session, protobuf_implementation):
# Install all test dependencies, then install this package in-place.
-
- if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"):
+ py_version = tuple([int(v) for v in session.python.split(".")])
+ if protobuf_implementation == "cpp" and py_version >= (3, 11):
session.skip("cpp implementation is not supported in python 3.11+")
constraints_path = str(
@@ -385,7 +389,7 @@ def docfx(session):
)
-@nox.session(python="3.13")
+@nox.session(python=DEFAULT_PYTHON_VERSION)
@nox.parametrize(
"protobuf_implementation",
["python", "upb", "cpp"],
@@ -393,7 +397,8 @@ def docfx(session):
def prerelease_deps(session, protobuf_implementation):
"""Run all tests with prerelease versions of dependencies installed."""
- if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"):
+ py_version = tuple([int(v) for v in session.python.split(".")])
+ if protobuf_implementation == "cpp" and py_version >= (3, 11):
session.skip("cpp implementation is not supported in python 3.11+")
# Install all dependencies
diff --git a/pytest.ini b/pytest.ini
index 2d8ce14b8..126bafe93 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -9,17 +9,22 @@ filterwarnings =
ignore:.*pkg_resources is deprecated as an API:DeprecationWarning
# Remove warning once https://github.com/grpc/grpc/issues/35974 is fixed
ignore:unclosed:ResourceWarning
- # Remove after support for Python 3.7 is dropped
- ignore:After January 1, 2024, new releases of this library will drop support for Python 3.7:DeprecationWarning
# Remove warning once https://github.com/googleapis/gapic-generator-python/issues/1939 is fixed
ignore:get_mtls_endpoint_and_cert_source is deprecated.:DeprecationWarning
# DeprecationWarnings triggered by Flask 1.0 testing by Flask dependencies in test code
- # 3.7 deprecation warnings
+ ignore:Importing 'itsdangerous.json' is deprecated and will be removed in ItsDangerous 2.1:DeprecationWarning
+ # 3.7 deprecation warnings, remove after support for Python 3.7 is dropped
+ ignore:After January 1, 2024, new releases of this library will drop support for Python 3.7:DeprecationWarning
ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working:DeprecationWarning
- # 3.8 - 3.9 deprecation warnings
- ignore:Importing 'itsdangerous.json' is deprecated and will be removed in ItsDangerous 2.1. Use Python's 'json' module instead.:DeprecationWarning
+ ignore:You are using a non-supported Python version \(3\.7:FutureWarning
+ # 3.8 deprecation warnings, remove after support for Python 3.8 is dropped
+ ignore:You are using a non-supported Python version \(3\.8:FutureWarning
+ # 3.9 deprecation warnings, remove after support for Python 3.9 is dropped
+ ignore:You are using a Python version \(3\.9:FutureWarning
+ # 3.10 deprecation warnings, remove after support for Python 3.10 is dropped
+ ignore:You are using a Python version \(3\.10:FutureWarning
ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working:DeprecationWarning
- # 3.12 deprecation warnings
+ # 3.12 deprecation warnings, remove after support for Python 3.12 is dropped
ignore:Attribute s is deprecated and will be removed in Python 3.14; use value instead:DeprecationWarning
ignore:ast.Str is deprecated and will be removed in Python 3.14; use ast.Constant instead:DeprecationWarning
ignore:'pkgutil.get_loader' is deprecated and slated for removal in Python 3.14; use importlib.util.find_spec\(\) instead:DeprecationWarning
@@ -27,3 +32,7 @@ filterwarnings =
ignore:.*Please use message_factory.GetMessageClass\(\) instead. SymbolDatabase.GetPrototype\(\) will be removed soon.:UserWarning
# Remove warning once https://github.com/googleapis/gapic-generator-python/issues/2046 is fixed
ignore:coroutine 'AsyncMockMixin._execute_mock_call' was never awaited:RuntimeWarning
+ # Remove when `credentials_file` argument is removed
+ ignore:The `credentials_file` argument is deprecated:DeprecationWarning
+ # Remove when load_credentials_from_file method is removed
+ ignore:The load_credentials_from_file method is deprecated:DeprecationWarning
diff --git a/release-please-config.json b/release-please-config.json
deleted file mode 100644
index 264e357f4..000000000
--- a/release-please-config.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
- "packages": {
- ".": {
- "release-type": "python",
- "extra-files": [
- "google/cloud/logging_v2/gapic_version.py",
- "google/cloud/logging/gapic_version.py",
- {
- "type": "json",
- "path": "samples/generated_samples/snippet_metadata_google.logging.v2.json",
- "jsonpath": "$.clientLibrary.version"
- }
- ]
- }
- },
- "release-type": "python",
- "plugins": [
- {
- "type": "sentence-case"
- }
- ],
- "initial-version": "0.1.0"
-}
-
\ No newline at end of file
diff --git a/samples/generated_samples/snippet_metadata_google.logging.v2.json b/samples/generated_samples/snippet_metadata_google.logging.v2.json
index 7d77545ab..6914e27b3 100644
--- a/samples/generated_samples/snippet_metadata_google.logging.v2.json
+++ b/samples/generated_samples/snippet_metadata_google.logging.v2.json
@@ -8,7 +8,7 @@
],
"language": "PYTHON",
"name": "google-cloud-logging",
- "version": "3.12.1"
+ "version": "3.13.0"
},
"snippets": [
{
diff --git a/samples/snippets/export_test.py b/samples/snippets/export_test.py
index c21fab2da..c9eb18efb 100644
--- a/samples/snippets/export_test.py
+++ b/samples/snippets/export_test.py
@@ -19,7 +19,7 @@
import time
import backoff
-from google.cloud import logging
+from google.cloud import logging, storage
import pytest
import export
@@ -34,6 +34,10 @@
# old sink, in seconds
CLEANUP_THRESHOLD = 7200 # 2 hours
+# Max buckets to delete at a time, to mitigate operation timeout
+# issues. To turn off in the future, set to None.
+MAX_BUCKETS = 1500
+
def _random_id():
return "".join(
@@ -46,8 +50,8 @@ def _create_sink_name():
@backoff.on_exception(backoff.expo, Exception, max_time=60, raise_on_giveup=False)
-def _delete_sink(sink):
- sink.delete()
+def _delete_object(obj, **kwargs):
+ obj.delete(**kwargs)
# Runs once for entire test suite
@@ -62,7 +66,20 @@ def cleanup_old_sinks():
if match:
sink_timestamp = int(match.group(1))
if TIMESTAMP - sink_timestamp > CLEANUP_THRESHOLD:
- _delete_sink(sink)
+ _delete_object(sink)
+
+ storage_client = storage.Client()
+
+ # See _sink_storage_setup in usage_guide.py for details about how
+ # sinks are named.
+ test_bucket_name_regex = r"^sink\-storage\-(\d+)$"
+ for bucket in storage_client.list_buckets(max_results=MAX_BUCKETS):
+ match = re.match(test_bucket_name_regex, bucket.name)
+ if match:
+ # Bucket timestamp is int(time.time() * 1000)
+ bucket_timestamp = int(match.group(1))
+ if TIMESTAMP - bucket_timestamp // 1000 > CLEANUP_THRESHOLD:
+ _delete_object(bucket, force=True)
@pytest.fixture
@@ -79,7 +96,7 @@ def example_sink(cleanup_old_sinks):
yield sink
- _delete_sink(sink)
+ _delete_object(sink)
def test_list(example_sink, capsys):
@@ -99,7 +116,7 @@ def test_create(capsys):
export.create_sink(sink_name, BUCKET, TEST_SINK_FILTER)
# Clean-up the temporary sink.
finally:
- _delete_sink(logging.Client().sink(sink_name))
+ _delete_object(logging.Client().sink(sink_name))
out, _ = capsys.readouterr()
assert sink_name in out
diff --git a/samples/snippets/noxfile.py b/samples/snippets/noxfile.py
index c9a3d1ecb..c326375be 100644
--- a/samples/snippets/noxfile.py
+++ b/samples/snippets/noxfile.py
@@ -89,7 +89,7 @@ def get_pytest_env_vars() -> Dict[str, str]:
# DO NOT EDIT - automatically generated.
# All versions used to test samples.
-ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
+ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
# Any default versions that should be ignored.
IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"]
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 052350089..000000000
--- a/setup.cfg
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright 2023 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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!
-[bdist_wheel]
-universal = 1
diff --git a/setup.py b/setup.py
index c80db0467..0bd8d6a83 100644
--- a/setup.py
+++ b/setup.py
@@ -85,6 +85,8 @@
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
"Operating System :: OS Independent",
"Topic :: Internet",
],
diff --git a/testing/constraints-3.14.txt b/testing/constraints-3.14.txt
new file mode 100644
index 000000000..981d37ac6
--- /dev/null
+++ b/testing/constraints-3.14.txt
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# This constraints file is required for unit tests.
+# List all library dependencies and extras in this file.
+google-api-core
+google-auth
+proto-plus
+protobuf
+google-cloud-core
+google-cloud-appengine-logging
+google-cloud-audit-log
+grpc-google-iam-v1
+opentelemetry-api
+
+# optional dependencies
+django
+flask
diff --git a/tests/system/test_system.py b/tests/system/test_system.py
index 487ecde62..366ed343b 100644
--- a/tests/system/test_system.py
+++ b/tests/system/test_system.py
@@ -721,8 +721,9 @@ def test_log_handler_otel_integration(self):
self.assertTrue(entries[0].trace_sampled, expected_tracesampled)
def test_log_handler_close(self):
- from multiprocessing import Process
+ import multiprocessing
+ ctx = multiprocessing.get_context("fork")
LOG_MESSAGE = "This is a test of handler.close before exiting."
LOGGER_NAME = "close-test"
handler_name = self._logger_name(LOGGER_NAME)
@@ -746,7 +747,7 @@ def subprocess_main():
cloud_logger.warning(LOG_MESSAGE)
handler.close()
- proc = Process(target=subprocess_main)
+ proc = ctx.Process(target=subprocess_main)
proc.start()
proc.join()
entries = _list_entries(logger)
@@ -754,8 +755,9 @@ def subprocess_main():
self.assertEqual(entries[0].payload, LOG_MESSAGE)
def test_log_client_flush_handlers(self):
- from multiprocessing import Process
+ import multiprocessing
+ ctx = multiprocessing.get_context("fork")
LOG_MESSAGE = "This is a test of client.flush_handlers before exiting."
LOGGER_NAME = "close-test"
handler_name = self._logger_name(LOGGER_NAME)
@@ -779,7 +781,7 @@ def subprocess_main():
cloud_logger.warning(LOG_MESSAGE)
Config.CLIENT.flush_handlers()
- proc = Process(target=subprocess_main)
+ proc = ctx.Process(target=subprocess_main)
proc.start()
proc.join()
entries = _list_entries(logger)
@@ -1058,7 +1060,7 @@ def retryable():
# http and gapic results should be consistent
self.assertEqual(gapic_list[0].insert_id, http_list[0].insert_id)
# returned logs should be in descending order
- self.assertEqual(gapic_list[0].payload, f"test {log_count-1}")
+ self.assertEqual(gapic_list[0].payload, f"test {log_count - 1}")
RetryErrors(
(ServiceUnavailable, InternalServerError, AssertionError),
diff --git a/tests/unit/gapic/logging_v2/test_config_service_v2.py b/tests/unit/gapic/logging_v2/test_config_service_v2.py
index 73a8f5d32..8f3aa847f 100644
--- a/tests/unit/gapic/logging_v2/test_config_service_v2.py
+++ b/tests/unit/gapic/logging_v2/test_config_service_v2.py
@@ -14,6 +14,7 @@
# limitations under the License.
#
import os
+import re
# try/except added for compatibility with python < 3.8
try:
diff --git a/tests/unit/gapic/logging_v2/test_logging_service_v2.py b/tests/unit/gapic/logging_v2/test_logging_service_v2.py
index ef3833740..14a9012e0 100644
--- a/tests/unit/gapic/logging_v2/test_logging_service_v2.py
+++ b/tests/unit/gapic/logging_v2/test_logging_service_v2.py
@@ -14,6 +14,7 @@
# limitations under the License.
#
import os
+import re
# try/except added for compatibility with python < 3.8
try:
diff --git a/tests/unit/gapic/logging_v2/test_metrics_service_v2.py b/tests/unit/gapic/logging_v2/test_metrics_service_v2.py
index 7c59a09f1..6109c1ef7 100644
--- a/tests/unit/gapic/logging_v2/test_metrics_service_v2.py
+++ b/tests/unit/gapic/logging_v2/test_metrics_service_v2.py
@@ -14,6 +14,7 @@
# limitations under the License.
#
import os
+import re
# try/except added for compatibility with python < 3.8
try: