diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index 2567653..7d98291 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -1,3 +1,3 @@
docker:
image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest
- digest: sha256:87eee22d276554e4e52863ec9b1cb6a7245815dfae20439712bf644348215a5a
+ digest: sha256:58f73ba196b5414782605236dd0712a73541b44ff2ff4d3a36ec41092dd6fa5b
diff --git a/.kokoro/samples/lint/common.cfg b/.kokoro/samples/lint/common.cfg
index 65b1bb1..22c5f14 100644
--- a/.kokoro/samples/lint/common.cfg
+++ b/.kokoro/samples/lint/common.cfg
@@ -31,4 +31,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples"
gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline"
# Use the trampoline script to run in docker.
-build_file: "python-video-transcoder/.kokoro/trampoline.sh"
\ No newline at end of file
+build_file: "python-video-transcoder/.kokoro/trampoline_v2.sh"
\ No newline at end of file
diff --git a/.kokoro/samples/python3.10/common.cfg b/.kokoro/samples/python3.10/common.cfg
new file mode 100644
index 0000000..4f0946f
--- /dev/null
+++ b/.kokoro/samples/python3.10/common.cfg
@@ -0,0 +1,40 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+# Build logs will be here
+action {
+ define_artifacts {
+ regex: "**/*sponge_log.xml"
+ }
+}
+
+# Specify which tests to run
+env_vars: {
+ key: "RUN_TESTS_SESSION"
+ value: "py-3.10"
+}
+
+# Declare build specific Cloud project.
+env_vars: {
+ key: "BUILD_SPECIFIC_GCLOUD_PROJECT"
+ value: "python-docs-samples-tests-310"
+}
+
+env_vars: {
+ key: "TRAMPOLINE_BUILD_FILE"
+ value: "github/python-video-transcoder/.kokoro/test-samples.sh"
+}
+
+# Configure the docker image for kokoro-trampoline.
+env_vars: {
+ key: "TRAMPOLINE_IMAGE"
+ value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker"
+}
+
+# Download secrets for samples
+gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples"
+
+# Download trampoline resources.
+gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline"
+
+# Use the trampoline script to run in docker.
+build_file: "python-video-transcoder/.kokoro/trampoline_v2.sh"
\ No newline at end of file
diff --git a/.kokoro/samples/python3.10/continuous.cfg b/.kokoro/samples/python3.10/continuous.cfg
new file mode 100644
index 0000000..a1c8d97
--- /dev/null
+++ b/.kokoro/samples/python3.10/continuous.cfg
@@ -0,0 +1,6 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "True"
+}
\ No newline at end of file
diff --git a/.kokoro/samples/python3.10/periodic-head.cfg b/.kokoro/samples/python3.10/periodic-head.cfg
new file mode 100644
index 0000000..882c418
--- /dev/null
+++ b/.kokoro/samples/python3.10/periodic-head.cfg
@@ -0,0 +1,11 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "True"
+}
+
+env_vars: {
+ key: "TRAMPOLINE_BUILD_FILE"
+ value: "github/python-video-transcoder/.kokoro/test-samples-against-head.sh"
+}
diff --git a/.kokoro/samples/python3.10/periodic.cfg b/.kokoro/samples/python3.10/periodic.cfg
new file mode 100644
index 0000000..71cd1e5
--- /dev/null
+++ b/.kokoro/samples/python3.10/periodic.cfg
@@ -0,0 +1,6 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "False"
+}
diff --git a/.kokoro/samples/python3.10/presubmit.cfg b/.kokoro/samples/python3.10/presubmit.cfg
new file mode 100644
index 0000000..a1c8d97
--- /dev/null
+++ b/.kokoro/samples/python3.10/presubmit.cfg
@@ -0,0 +1,6 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "True"
+}
\ No newline at end of file
diff --git a/.kokoro/samples/python3.6/common.cfg b/.kokoro/samples/python3.6/common.cfg
index 53c2039..949d88e 100644
--- a/.kokoro/samples/python3.6/common.cfg
+++ b/.kokoro/samples/python3.6/common.cfg
@@ -37,4 +37,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples"
gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline"
# Use the trampoline script to run in docker.
-build_file: "python-video-transcoder/.kokoro/trampoline.sh"
\ No newline at end of file
+build_file: "python-video-transcoder/.kokoro/trampoline_v2.sh"
\ No newline at end of file
diff --git a/.kokoro/samples/python3.6/periodic.cfg b/.kokoro/samples/python3.6/periodic.cfg
index 50fec96..71cd1e5 100644
--- a/.kokoro/samples/python3.6/periodic.cfg
+++ b/.kokoro/samples/python3.6/periodic.cfg
@@ -3,4 +3,4 @@
env_vars: {
key: "INSTALL_LIBRARY_FROM_SOURCE"
value: "False"
-}
\ No newline at end of file
+}
diff --git a/.kokoro/samples/python3.7/common.cfg b/.kokoro/samples/python3.7/common.cfg
index 33e7d9c..6ea1957 100644
--- a/.kokoro/samples/python3.7/common.cfg
+++ b/.kokoro/samples/python3.7/common.cfg
@@ -37,4 +37,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples"
gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline"
# Use the trampoline script to run in docker.
-build_file: "python-video-transcoder/.kokoro/trampoline.sh"
\ No newline at end of file
+build_file: "python-video-transcoder/.kokoro/trampoline_v2.sh"
\ No newline at end of file
diff --git a/.kokoro/samples/python3.7/periodic.cfg b/.kokoro/samples/python3.7/periodic.cfg
index 50fec96..71cd1e5 100644
--- a/.kokoro/samples/python3.7/periodic.cfg
+++ b/.kokoro/samples/python3.7/periodic.cfg
@@ -3,4 +3,4 @@
env_vars: {
key: "INSTALL_LIBRARY_FROM_SOURCE"
value: "False"
-}
\ No newline at end of file
+}
diff --git a/.kokoro/samples/python3.8/common.cfg b/.kokoro/samples/python3.8/common.cfg
index c94d8bf..d25c9e7 100644
--- a/.kokoro/samples/python3.8/common.cfg
+++ b/.kokoro/samples/python3.8/common.cfg
@@ -37,4 +37,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples"
gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline"
# Use the trampoline script to run in docker.
-build_file: "python-video-transcoder/.kokoro/trampoline.sh"
\ No newline at end of file
+build_file: "python-video-transcoder/.kokoro/trampoline_v2.sh"
\ No newline at end of file
diff --git a/.kokoro/samples/python3.8/periodic.cfg b/.kokoro/samples/python3.8/periodic.cfg
index 50fec96..71cd1e5 100644
--- a/.kokoro/samples/python3.8/periodic.cfg
+++ b/.kokoro/samples/python3.8/periodic.cfg
@@ -3,4 +3,4 @@
env_vars: {
key: "INSTALL_LIBRARY_FROM_SOURCE"
value: "False"
-}
\ No newline at end of file
+}
diff --git a/.kokoro/samples/python3.9/common.cfg b/.kokoro/samples/python3.9/common.cfg
index caac37c..a72ee88 100644
--- a/.kokoro/samples/python3.9/common.cfg
+++ b/.kokoro/samples/python3.9/common.cfg
@@ -37,4 +37,4 @@ gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples"
gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline"
# Use the trampoline script to run in docker.
-build_file: "python-video-transcoder/.kokoro/trampoline.sh"
\ No newline at end of file
+build_file: "python-video-transcoder/.kokoro/trampoline_v2.sh"
\ No newline at end of file
diff --git a/.kokoro/samples/python3.9/periodic.cfg b/.kokoro/samples/python3.9/periodic.cfg
index 50fec96..71cd1e5 100644
--- a/.kokoro/samples/python3.9/periodic.cfg
+++ b/.kokoro/samples/python3.9/periodic.cfg
@@ -3,4 +3,4 @@
env_vars: {
key: "INSTALL_LIBRARY_FROM_SOURCE"
value: "False"
-}
\ No newline at end of file
+}
diff --git a/.kokoro/test-samples-against-head.sh b/.kokoro/test-samples-against-head.sh
index fd9ccdb..ba3a707 100755
--- a/.kokoro/test-samples-against-head.sh
+++ b/.kokoro/test-samples-against-head.sh
@@ -23,6 +23,4 @@ set -eo pipefail
# Enables `**` to include files nested inside sub-folders
shopt -s globstar
-cd github/python-video-transcoder
-
exec .kokoro/test-samples-impl.sh
diff --git a/.kokoro/test-samples.sh b/.kokoro/test-samples.sh
index ef463cc..11c042d 100755
--- a/.kokoro/test-samples.sh
+++ b/.kokoro/test-samples.sh
@@ -24,8 +24,6 @@ set -eo pipefail
# Enables `**` to include files nested inside sub-folders
shopt -s globstar
-cd github/python-video-transcoder
-
# Run periodic samples tests at latest release
if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then
# preserving the test runner implementation.
diff --git a/.repo-metadata.json b/.repo-metadata.json
index 1056851..ee08121 100644
--- a/.repo-metadata.json
+++ b/.repo-metadata.json
@@ -9,6 +9,7 @@
"library_type": "GAPIC_AUTO",
"repo": "googleapis/python-video-transcoder",
"distribution_name": "google-cloud-video-transcoder",
- "api_id": "transcoder.googleapis.com"
- }
-
\ No newline at end of file
+ "api_id": "transcoder.googleapis.com",
+ "default_version": "v1",
+ "codeowner_team": ""
+}
diff --git a/.trampolinerc b/.trampolinerc
index 383b6ec..0eee72a 100644
--- a/.trampolinerc
+++ b/.trampolinerc
@@ -16,15 +16,26 @@
# Add required env vars here.
required_envvars+=(
- "STAGING_BUCKET"
- "V2_STAGING_BUCKET"
)
# Add env vars which are passed down into the container here.
pass_down_envvars+=(
+ "NOX_SESSION"
+ ###############
+ # Docs builds
+ ###############
"STAGING_BUCKET"
"V2_STAGING_BUCKET"
- "NOX_SESSION"
+ ##################
+ # Samples builds
+ ##################
+ "INSTALL_LIBRARY_FROM_SOURCE"
+ "RUN_TESTS_SESSION"
+ "BUILD_SPECIFIC_GCLOUD_PROJECT"
+ # Target directories.
+ "RUN_TESTS_DIRS"
+ # The nox session to run.
+ "RUN_TESTS_SESSION"
)
# Prevent unintentional override on the default image.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 49e6987..364a544 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,17 @@
# Changelog
+## [1.1.0](https://www.github.com/googleapis/python-video-transcoder/compare/v1.0.1...v1.1.0) (2021-10-08)
+
+
+### Features
+
+* add context manager support in client ([#104](https://www.github.com/googleapis/python-video-transcoder/issues/104)) ([2c5f07d](https://www.github.com/googleapis/python-video-transcoder/commit/2c5f07d5d12d05c65854409f45374b846363328c))
+
+
+### Bug Fixes
+
+* remove Encryption settings that were published erroneously ([#102](https://www.github.com/googleapis/python-video-transcoder/issues/102)) ([824009a](https://www.github.com/googleapis/python-video-transcoder/commit/824009ac01700341071b50af2741ef6493dcbcf5))
+
### [1.0.1](https://www.github.com/googleapis/python-video-transcoder/compare/v1.0.0...v1.0.1) (2021-09-30)
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index 659b644..18b5877 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -22,7 +22,7 @@ In order to add a feature:
documentation.
- The feature must work fully on the following CPython versions:
- 3.6, 3.7, 3.8 and 3.9 on both UNIX and Windows.
+ 3.6, 3.7, 3.8, 3.9 and 3.10 on both UNIX and Windows.
- The feature must not add unnecessary dependencies (where
"unnecessary" is of course subjective, but new dependencies should
@@ -72,7 +72,7 @@ We use `nox `__ to instrument our tests.
- To run a single unit test::
- $ nox -s unit-3.9 -- -k
+ $ nox -s unit-3.10 -- -k
.. note::
@@ -225,11 +225,13 @@ We support:
- `Python 3.7`_
- `Python 3.8`_
- `Python 3.9`_
+- `Python 3.10`_
.. _Python 3.6: https://docs.python.org/3.6/
.. _Python 3.7: https://docs.python.org/3.7/
.. _Python 3.8: https://docs.python.org/3.8/
.. _Python 3.9: https://docs.python.org/3.9/
+.. _Python 3.10: https://docs.python.org/3.10/
Supported versions can be found in our ``noxfile.py`` `config`_.
diff --git a/google/cloud/video/transcoder/__init__.py b/google/cloud/video/transcoder/__init__.py
index a5fa944..67b4b12 100644
--- a/google/cloud/video/transcoder/__init__.py
+++ b/google/cloud/video/transcoder/__init__.py
@@ -25,7 +25,6 @@
from google.cloud.video.transcoder_v1.types.resources import AudioStream
from google.cloud.video.transcoder_v1.types.resources import EditAtom
from google.cloud.video.transcoder_v1.types.resources import ElementaryStream
-from google.cloud.video.transcoder_v1.types.resources import Encryption
from google.cloud.video.transcoder_v1.types.resources import Input
from google.cloud.video.transcoder_v1.types.resources import Job
from google.cloud.video.transcoder_v1.types.resources import JobConfig
@@ -58,7 +57,6 @@
"AudioStream",
"EditAtom",
"ElementaryStream",
- "Encryption",
"Input",
"Job",
"JobConfig",
diff --git a/google/cloud/video/transcoder_v1/__init__.py b/google/cloud/video/transcoder_v1/__init__.py
index cd70bef..b76bfde 100644
--- a/google/cloud/video/transcoder_v1/__init__.py
+++ b/google/cloud/video/transcoder_v1/__init__.py
@@ -21,7 +21,6 @@
from .types.resources import AudioStream
from .types.resources import EditAtom
from .types.resources import ElementaryStream
-from .types.resources import Encryption
from .types.resources import Input
from .types.resources import Job
from .types.resources import JobConfig
@@ -57,7 +56,6 @@
"DeleteJobTemplateRequest",
"EditAtom",
"ElementaryStream",
- "Encryption",
"GetJobRequest",
"GetJobTemplateRequest",
"Input",
diff --git a/google/cloud/video/transcoder_v1/services/transcoder_service/async_client.py b/google/cloud/video/transcoder_v1/services/transcoder_service/async_client.py
index 5d129e7..d7cce70 100644
--- a/google/cloud/video/transcoder_v1/services/transcoder_service/async_client.py
+++ b/google/cloud/video/transcoder_v1/services/transcoder_service/async_client.py
@@ -776,6 +776,12 @@ async def delete_job_template(
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()
+
try:
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
diff --git a/google/cloud/video/transcoder_v1/services/transcoder_service/client.py b/google/cloud/video/transcoder_v1/services/transcoder_service/client.py
index f2c66a9..00a2235 100644
--- a/google/cloud/video/transcoder_v1/services/transcoder_service/client.py
+++ b/google/cloud/video/transcoder_v1/services/transcoder_service/client.py
@@ -372,10 +372,7 @@ def __init__(
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=(
- Transport == type(self).get_transport_class("grpc")
- or Transport == type(self).get_transport_class("grpc_asyncio")
- ),
+ always_use_jwt_access=True,
)
def create_job(
@@ -979,6 +976,19 @@ def delete_job_template(
request, retry=retry, timeout=timeout, metadata=metadata,
)
+ def __enter__(self):
+ 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()
+
try:
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
diff --git a/google/cloud/video/transcoder_v1/services/transcoder_service/transports/base.py b/google/cloud/video/transcoder_v1/services/transcoder_service/transports/base.py
index c7755d7..cf9d646 100644
--- a/google/cloud/video/transcoder_v1/services/transcoder_service/transports/base.py
+++ b/google/cloud/video/transcoder_v1/services/transcoder_service/transports/base.py
@@ -182,6 +182,15 @@ def _prep_wrapped_messages(self, 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 create_job(
self,
diff --git a/google/cloud/video/transcoder_v1/services/transcoder_service/transports/grpc.py b/google/cloud/video/transcoder_v1/services/transcoder_service/transports/grpc.py
index 4853aac..457c5af 100644
--- a/google/cloud/video/transcoder_v1/services/transcoder_service/transports/grpc.py
+++ b/google/cloud/video/transcoder_v1/services/transcoder_service/transports/grpc.py
@@ -437,5 +437,8 @@ def delete_job_template(
)
return self._stubs["delete_job_template"]
+ def close(self):
+ self.grpc_channel.close()
+
__all__ = ("TranscoderServiceGrpcTransport",)
diff --git a/google/cloud/video/transcoder_v1/services/transcoder_service/transports/grpc_asyncio.py b/google/cloud/video/transcoder_v1/services/transcoder_service/transports/grpc_asyncio.py
index ae4830b..512ba37 100644
--- a/google/cloud/video/transcoder_v1/services/transcoder_service/transports/grpc_asyncio.py
+++ b/google/cloud/video/transcoder_v1/services/transcoder_service/transports/grpc_asyncio.py
@@ -446,5 +446,8 @@ def delete_job_template(
)
return self._stubs["delete_job_template"]
+ def close(self):
+ return self.grpc_channel.close()
+
__all__ = ("TranscoderServiceGrpcAsyncIOTransport",)
diff --git a/google/cloud/video/transcoder_v1/types/__init__.py b/google/cloud/video/transcoder_v1/types/__init__.py
index 4aa88f8..9544b42 100644
--- a/google/cloud/video/transcoder_v1/types/__init__.py
+++ b/google/cloud/video/transcoder_v1/types/__init__.py
@@ -18,7 +18,6 @@
AudioStream,
EditAtom,
ElementaryStream,
- Encryption,
Input,
Job,
JobConfig,
@@ -52,7 +51,6 @@
"AudioStream",
"EditAtom",
"ElementaryStream",
- "Encryption",
"Input",
"Job",
"JobConfig",
diff --git a/google/cloud/video/transcoder_v1/types/resources.py b/google/cloud/video/transcoder_v1/types/resources.py
index 5b655c2..2bd7328 100644
--- a/google/cloud/video/transcoder_v1/types/resources.py
+++ b/google/cloud/video/transcoder_v1/types/resources.py
@@ -41,17 +41,17 @@
"AudioStream",
"TextStream",
"SegmentSettings",
- "Encryption",
},
)
class Job(proto.Message):
r"""Transcoding job resource.
+
Attributes:
name (str):
The resource name of the job. Format:
- ``projects/{project}/locations/{location}/jobs/{job}``
+ ``projects/{project_number}/locations/{location}/jobs/{job}``
input_uri (str):
Input only. Specify the ``input_uri`` to populate empty
``uri`` fields in each element of ``Job.config.inputs`` or
@@ -124,10 +124,11 @@ class ProcessingState(proto.Enum):
class JobTemplate(proto.Message):
r"""Transcoding job template resource.
+
Attributes:
name (str):
The resource name of the job template. Format:
- ``projects/{project}/locations/{location}/jobTemplates/{job_template}``
+ ``projects/{project_number}/locations/{location}/jobTemplates/{job_template}``
config (google.cloud.video.transcoder_v1.types.JobConfig):
The configuration for this template.
"""
@@ -138,6 +139,7 @@ class JobTemplate(proto.Message):
class JobConfig(proto.Message):
r"""Job configuration
+
Attributes:
inputs (Sequence[google.cloud.video.transcoder_v1.types.Input]):
List of input assets stored in Cloud Storage.
@@ -183,6 +185,7 @@ class JobConfig(proto.Message):
class Input(proto.Message):
r"""Input asset.
+
Attributes:
key (str):
A unique key for this input. Must be
@@ -206,6 +209,7 @@ class Input(proto.Message):
class Output(proto.Message):
r"""Location of output file(s) in a Cloud Storage bucket.
+
Attributes:
uri (str):
URI for the output file(s). For example,
@@ -218,6 +222,7 @@ class Output(proto.Message):
class EditAtom(proto.Message):
r"""Edit atom.
+
Attributes:
key (str):
A unique key for this atom. Must be specified
@@ -247,6 +252,7 @@ class EditAtom(proto.Message):
class AdBreak(proto.Message):
r"""Ad break.
+
Attributes:
start_time_offset (google.protobuf.duration_pb2.Duration):
Start time in seconds for the ad break, relative to the
@@ -289,11 +295,12 @@ class ElementaryStream(proto.Message):
class MuxStream(proto.Message):
r"""Multiplexing settings for output stream.
+
Attributes:
key (str):
A unique key for this multiplexed stream. HLS media
- manifests will be named ``MuxStream.key`` with the
- ``".m3u8"`` extension suffix.
+ manifests will be named ``MuxStream.key`` with the ``.m3u8``
+ extension suffix.
file_name (str):
The name of the generated file. The default is
``MuxStream.key`` with the extension suffix corresponding to
@@ -301,23 +308,21 @@ class MuxStream(proto.Message):
Individual segments also have an incremental 10-digit
zero-padded suffix starting from 0 before the extension,
- such as ``"mux_stream0000000123.ts"``.
+ such as ``mux_stream0000000123.ts``.
container (str):
- The container format. The default is ``"mp4"``
+ The container format. The default is ``mp4``
Supported container formats:
- - 'ts'
- - 'fmp4'- the corresponding file extension is ``".m4s"``
- - 'mp4'
- - 'vtt'
+ - ``ts``
+ - ``fmp4``- the corresponding file extension is ``.m4s``
+ - ``mp4``
+ - ``vtt``
elementary_streams (Sequence[str]):
List of ``ElementaryStream.key``\ s multiplexed in this
stream.
segment_settings (google.cloud.video.transcoder_v1.types.SegmentSettings):
- Segment settings for ``"ts"``, ``"fmp4"`` and ``"vtt"``.
- encryption (google.cloud.video.transcoder_v1.types.Encryption):
- Encryption settings.
+ Segment settings for ``ts``, ``fmp4`` and ``vtt``.
"""
key = proto.Field(proto.STRING, number=1,)
@@ -325,19 +330,18 @@ class MuxStream(proto.Message):
container = proto.Field(proto.STRING, number=3,)
elementary_streams = proto.RepeatedField(proto.STRING, number=4,)
segment_settings = proto.Field(proto.MESSAGE, number=5, message="SegmentSettings",)
- encryption = proto.Field(proto.MESSAGE, number=6, message="Encryption",)
class Manifest(proto.Message):
r"""Manifest configuration.
+
Attributes:
file_name (str):
- The name of the generated file. The default is
- ``"manifest"`` with the extension suffix corresponding to
- the ``Manifest.type``.
+ The name of the generated file. The default is ``manifest``
+ with the extension suffix corresponding to the
+ ``Manifest.type``.
type_ (google.cloud.video.transcoder_v1.types.Manifest.ManifestType):
- Required. Type of the manifest, can be "HLS"
- or "DASH".
+ Required. Type of the manifest, can be ``HLS`` or ``DASH``.
mux_streams (Sequence[str]):
Required. List of user given ``MuxStream.key``\ s that
should appear in this manifest.
@@ -348,7 +352,7 @@ class Manifest(proto.Message):
"""
class ManifestType(proto.Enum):
- r"""The manifest type can be either ``"HLS"`` or ``"DASH"``."""
+ r"""The manifest type can be either ``HLS`` or ``DASH``."""
MANIFEST_TYPE_UNSPECIFIED = 0
HLS = 1
DASH = 2
@@ -360,6 +364,7 @@ class ManifestType(proto.Enum):
class PubsubDestination(proto.Message):
r"""A Pub/Sub destination.
+
Attributes:
topic (str):
The name of the Pub/Sub topic to publish job completion
@@ -375,17 +380,17 @@ class SpriteSheet(proto.Message):
Attributes:
format_ (str):
- Format type. The default is ``"jpeg"``.
+ Format type. The default is ``jpeg``.
Supported formats:
- - 'jpeg'
+ - ``jpeg``
file_prefix (str):
Required. File name prefix for the generated sprite sheets.
Each sprite sheet has an incremental 10-digit zero-padded
suffix starting from 0 before the extension, such as
- ``"sprite_sheet0000000123.jpeg"``.
+ ``sprite_sheet0000000123.jpeg``.
sprite_width_pixels (int):
Required. The width of sprite in pixels. Must be an even
integer. To preserve the source aspect ratio, set the
@@ -459,6 +464,7 @@ class SpriteSheet(proto.Message):
class Overlay(proto.Message):
r"""Overlay configuration.
+
Attributes:
image (google.cloud.video.transcoder_v1.types.Overlay.Image):
Image overlay.
@@ -475,6 +481,7 @@ class FadeType(proto.Enum):
class NormalizedCoordinate(proto.Message):
r"""2D normalized coordinates. Default: ``{0.0, 0.0}``
+
Attributes:
x (float):
Normalized x coordinate.
@@ -487,6 +494,7 @@ class NormalizedCoordinate(proto.Message):
class Image(proto.Message):
r"""Overlaid jpeg image.
+
Attributes:
uri (str):
Required. URI of the JPEG image in Cloud Storage. For
@@ -512,6 +520,7 @@ class Image(proto.Message):
class AnimationStatic(proto.Message):
r"""Display static overlay object.
+
Attributes:
xy (google.cloud.video.transcoder_v1.types.Overlay.NormalizedCoordinate):
Normalized coordinates based on output video resolution.
@@ -534,6 +543,7 @@ class AnimationStatic(proto.Message):
class AnimationFade(proto.Message):
r"""Display overlay object with fade animation.
+
Attributes:
fade_type (google.cloud.video.transcoder_v1.types.Overlay.FadeType):
Required. Type of fade animation: ``FADE_IN`` or
@@ -581,6 +591,7 @@ class AnimationEnd(proto.Message):
class Animation(proto.Message):
r"""Animation types.
+
Attributes:
animation_static (google.cloud.video.transcoder_v1.types.Overlay.AnimationStatic):
Display static overlay object.
@@ -615,6 +626,7 @@ class Animation(proto.Message):
class PreprocessingConfig(proto.Message):
r"""Preprocessing configurations.
+
Attributes:
color (google.cloud.video.transcoder_v1.types.PreprocessingConfig.Color):
Color preprocessing configuration.
@@ -632,6 +644,7 @@ class PreprocessingConfig(proto.Message):
class Color(proto.Message):
r"""Color preprocessing configuration.
+
Attributes:
saturation (float):
Control color saturation of the video. Enter
@@ -656,6 +669,7 @@ class Color(proto.Message):
class Denoise(proto.Message):
r"""Denoise preprocessing configuration.
+
Attributes:
strength (float):
Set strength of the denoise. Enter a value
@@ -663,12 +677,12 @@ class Denoise(proto.Message):
smoother the image. 0 is no denoising. The
default is 0.
tune (str):
- Set the denoiser mode. The default is ``"standard"``.
+ Set the denoiser mode. The default is ``standard``.
Supported denoiser modes:
- - 'standard'
- - 'grain'
+ - ``standard``
+ - ``grain``
"""
strength = proto.Field(proto.DOUBLE, number=1,)
@@ -676,6 +690,7 @@ class Denoise(proto.Message):
class Deblock(proto.Message):
r"""Deblock preprocessing configuration.
+
Attributes:
strength (float):
Set strength of the deblocker. Enter a value
@@ -691,6 +706,7 @@ class Deblock(proto.Message):
class Audio(proto.Message):
r"""Audio preprocessing configuration.
+
Attributes:
lufs (float):
Specify audio loudness normalization in loudness units
@@ -777,6 +793,7 @@ class Pad(proto.Message):
class VideoStream(proto.Message):
r"""Video stream resource.
+
Attributes:
h264 (google.cloud.video.transcoder_v1.types.VideoStream.H264CodecSettings):
H264 codec settings.
@@ -788,6 +805,7 @@ class VideoStream(proto.Message):
class H264CodecSettings(proto.Message):
r"""H264 codec settings.
+
Attributes:
width_pixels (int):
The width of the video in pixels. Must be an
@@ -812,28 +830,29 @@ class H264CodecSettings(proto.Message):
for more information.
bitrate_bps (int):
Required. The video bitrate in bits per
- second. Must be between 1 and 1,000,000,000.
+ second. The minimum value is 1,000. The maximum
+ value is 800,000,000.
pixel_format (str):
- Pixel format to use. The default is ``"yuv420p"``.
+ Pixel format to use. The default is ``yuv420p``.
Supported pixel formats:
- - 'yuv420p' pixel format.
- - 'yuv422p' pixel format.
- - 'yuv444p' pixel format.
- - 'yuv420p10' 10-bit HDR pixel format.
- - 'yuv422p10' 10-bit HDR pixel format.
- - 'yuv444p10' 10-bit HDR pixel format.
- - 'yuv420p12' 12-bit HDR pixel format.
- - 'yuv422p12' 12-bit HDR pixel format.
- - 'yuv444p12' 12-bit HDR pixel format.
+ - ``yuv420p`` pixel format
+ - ``yuv422p`` pixel format
+ - ``yuv444p`` pixel format
+ - ``yuv420p10`` 10-bit HDR pixel format
+ - ``yuv422p10`` 10-bit HDR pixel format
+ - ``yuv444p10`` 10-bit HDR pixel format
+ - ``yuv420p12`` 12-bit HDR pixel format
+ - ``yuv422p12`` 12-bit HDR pixel format
+ - ``yuv444p12`` 12-bit HDR pixel format
rate_control_mode (str):
- Specify the ``rate_control_mode``. The default is ``"vbr"``.
+ Specify the ``rate_control_mode``. The default is ``vbr``.
Supported rate control modes:
- - 'vbr' - variable bitrate
- - 'crf' - constant rate factor
+ - ``vbr`` - variable bitrate
+ - ``crf`` - constant rate factor
crf_level (int):
Target CRF level. Must be between 10 and 36,
where 10 is the highest quality and 36 is the
@@ -846,14 +865,14 @@ class H264CodecSettings(proto.Message):
frame count. Must be greater than zero.
gop_duration (google.protobuf.duration_pb2.Duration):
Select the GOP size based on the specified duration. The
- default is ``"3s"``. Note that ``gopDuration`` must be less
+ default is ``3s``. Note that ``gopDuration`` must be less
than or equal to ```segmentDuration`` <#SegmentSettings>`__,
and ```segmentDuration`` <#SegmentSettings>`__ must be
divisible by ``gopDuration``.
enable_two_pass (bool):
Use two-pass encoding strategy to achieve better video
- quality. ``VideoStream.rate_control_mode`` must be
- ``"vbr"``. The default is ``false``.
+ quality. ``VideoStream.rate_control_mode`` must be ``vbr``.
+ The default is ``false``.
vbv_size_bits (int):
Size of the Video Buffering Verifier (VBV) buffer in bits.
Must be greater than zero. The default is equal to
@@ -863,12 +882,12 @@ class H264CodecSettings(proto.Message):
buffer in bits. Must be greater than zero. The default is
equal to 90% of ``VideoStream.vbv_size_bits``.
entropy_coder (str):
- The entropy coder to use. The default is ``"cabac"``.
+ The entropy coder to use. The default is ``cabac``.
Supported entropy coders:
- - 'cavlc'
- - 'cabac'
+ - ``cavlc``
+ - ``cabac``
b_pyramid (bool):
Allow B-pyramid for reference frame selection. This may not
be supported on all decoders. The default is ``false``.
@@ -891,23 +910,23 @@ class H264CodecSettings(proto.Message):
- ``high`` (default)
The available options are
- `FFmpeg-compatible `__\ {:
- class="external" }. Note that certain values for this field
- may cause the transcoder to override other fields you set in
- the ``H264CodecSettings`` message.
+ `FFmpeg-compatible `__.
+ Note that certain values for this field may cause the
+ transcoder to override other fields you set in the
+ ``H264CodecSettings`` message.
tune (str):
Enforces the specified codec tune. The available options are
- `FFmpeg-compatible `__\ {:
- class="external" }. Note that certain values for this field
- may cause the transcoder to override other fields you set in
- the ``H264CodecSettings`` message.
+ `FFmpeg-compatible `__.
+ Note that certain values for this field may cause the
+ transcoder to override other fields you set in the
+ ``H264CodecSettings`` message.
preset (str):
Enforces the specified codec preset. The default is
``veryfast``. The available options are
- `FFmpeg-compatible `__\ {:
- class="external" }. Note that certain values for this field
- may cause the transcoder to override other fields you set in
- the ``H264CodecSettings`` message.
+ `FFmpeg-compatible `__.
+ Note that certain values for this field may cause the
+ transcoder to override other fields you set in the
+ ``H264CodecSettings`` message.
"""
width_pixels = proto.Field(proto.INT32, number=1,)
@@ -935,6 +954,7 @@ class H264CodecSettings(proto.Message):
class H265CodecSettings(proto.Message):
r"""H265 codec settings.
+
Attributes:
width_pixels (int):
The width of the video in pixels. Must be an
@@ -959,28 +979,29 @@ class H265CodecSettings(proto.Message):
for more information.
bitrate_bps (int):
Required. The video bitrate in bits per
- second. Must be between 1 and 1,000,000,000.
+ second. The minimum value is 1,000. The maximum
+ value is 800,000,000.
pixel_format (str):
- Pixel format to use. The default is ``"yuv420p"``.
+ Pixel format to use. The default is ``yuv420p``.
Supported pixel formats:
- - 'yuv420p' pixel format.
- - 'yuv422p' pixel format.
- - 'yuv444p' pixel format.
- - 'yuv420p10' 10-bit HDR pixel format.
- - 'yuv422p10' 10-bit HDR pixel format.
- - 'yuv444p10' 10-bit HDR pixel format.
- - 'yuv420p12' 12-bit HDR pixel format.
- - 'yuv422p12' 12-bit HDR pixel format.
- - 'yuv444p12' 12-bit HDR pixel format.
+ - ``yuv420p`` pixel format
+ - ``yuv422p`` pixel format
+ - ``yuv444p`` pixel format
+ - ``yuv420p10`` 10-bit HDR pixel format
+ - ``yuv422p10`` 10-bit HDR pixel format
+ - ``yuv444p10`` 10-bit HDR pixel format
+ - ``yuv420p12`` 12-bit HDR pixel format
+ - ``yuv422p12`` 12-bit HDR pixel format
+ - ``yuv444p12`` 12-bit HDR pixel format
rate_control_mode (str):
- Specify the ``rate_control_mode``. The default is ``"vbr"``.
+ Specify the ``rate_control_mode``. The default is ``vbr``.
Supported rate control modes:
- - 'vbr' - variable bitrate
- - 'crf' - constant rate factor
+ - ``vbr`` - variable bitrate
+ - ``crf`` - constant rate factor
crf_level (int):
Target CRF level. Must be between 10 and 36,
where 10 is the highest quality and 36 is the
@@ -993,14 +1014,14 @@ class H265CodecSettings(proto.Message):
frame count. Must be greater than zero.
gop_duration (google.protobuf.duration_pb2.Duration):
Select the GOP size based on the specified duration. The
- default is ``"3s"``. Note that ``gopDuration`` must be less
+ default is ``3s``. Note that ``gopDuration`` must be less
than or equal to ```segmentDuration`` <#SegmentSettings>`__,
and ```segmentDuration`` <#SegmentSettings>`__ must be
divisible by ``gopDuration``.
enable_two_pass (bool):
Use two-pass encoding strategy to achieve better video
- quality. ``VideoStream.rate_control_mode`` must be
- ``"vbr"``. The default is ``false``.
+ quality. ``VideoStream.rate_control_mode`` must be ``vbr``.
+ The default is ``false``.
vbv_size_bits (int):
Size of the Video Buffering Verifier (VBV) buffer in bits.
Must be greater than zero. The default is equal to
@@ -1026,48 +1047,48 @@ class H265CodecSettings(proto.Message):
Enforces the specified codec profile. The following profiles
are supported:
- 8bit profiles
+ - 8-bit profiles
- - ``main`` (default)
- - ``main-intra``
- - ``mainstillpicture``
+ - ``main`` (default)
+ - ``main-intra``
+ - ``mainstillpicture``
- 10bit profiles
+ - 10-bit profiles
- - ``main10`` (default)
- - ``main10-intra``
- - ``main422-10``
- - ``main422-10-intra``
- - ``main444-10``
- - ``main444-10-intra``
+ - ``main10`` (default)
+ - ``main10-intra``
+ - ``main422-10``
+ - ``main422-10-intra``
+ - ``main444-10``
+ - ``main444-10-intra``
- 12bit profiles
+ - 12-bit profiles
- - ``main12`` (default)
- - ``main12-intra``
- - ``main422-12``
- - ``main422-12-intra``
- - ``main444-12``
- - ``main444-12-intra``
+ - ``main12`` (default)
+ - ``main12-intra``
+ - ``main422-12``
+ - ``main422-12-intra``
+ - ``main444-12``
+ - ``main444-12-intra``
The available options are
- `FFmpeg-compatible `__\ {:
- class="external" }. Note that certain values for this field
- may cause the transcoder to override other fields you set in
- the ``H265CodecSettings`` message.
+ `FFmpeg-compatible `__. Note
+ that certain values for this field may cause the transcoder
+ to override other fields you set in the
+ ``H265CodecSettings`` message.
tune (str):
Enforces the specified codec tune. The available options are
- `FFmpeg-compatible `__\ {:
- class="external" }. Note that certain values for this field
- may cause the transcoder to override other fields you set in
- the ``H265CodecSettings`` message.
+ `FFmpeg-compatible `__.
+ Note that certain values for this field may cause the
+ transcoder to override other fields you set in the
+ ``H265CodecSettings`` message.
preset (str):
Enforces the specified codec preset. The default is
``veryfast``. The available options are
- `FFmpeg-compatible `__\ {:
- class="external" }. Note that certain values for this field
- may cause the transcoder to override other fields you set in
- the ``H265CodecSettings`` message.
+ `FFmpeg-compatible `__.
+ Note that certain values for this field may cause the
+ transcoder to override other fields you set in the
+ ``H265CodecSettings`` message.
"""
width_pixels = proto.Field(proto.INT32, number=1,)
@@ -1094,6 +1115,7 @@ class H265CodecSettings(proto.Message):
class Vp9CodecSettings(proto.Message):
r"""VP9 codec settings.
+
Attributes:
width_pixels (int):
The width of the video in pixels. Must be an
@@ -1118,28 +1140,29 @@ class Vp9CodecSettings(proto.Message):
for more information.
bitrate_bps (int):
Required. The video bitrate in bits per
- second. Must be between 1 and 1,000,000,000.
+ second. The minimum value is 1,000. The maximum
+ value is 480,000,000.
pixel_format (str):
- Pixel format to use. The default is ``"yuv420p"``.
+ Pixel format to use. The default is ``yuv420p``.
Supported pixel formats:
- - 'yuv420p' pixel format.
- - 'yuv422p' pixel format.
- - 'yuv444p' pixel format.
- - 'yuv420p10' 10-bit HDR pixel format.
- - 'yuv422p10' 10-bit HDR pixel format.
- - 'yuv444p10' 10-bit HDR pixel format.
- - 'yuv420p12' 12-bit HDR pixel format.
- - 'yuv422p12' 12-bit HDR pixel format.
- - 'yuv444p12' 12-bit HDR pixel format.
+ - ``yuv420p`` pixel format
+ - ``yuv422p`` pixel format
+ - ``yuv444p`` pixel format
+ - ``yuv420p10`` 10-bit HDR pixel format
+ - ``yuv422p10`` 10-bit HDR pixel format
+ - ``yuv444p10`` 10-bit HDR pixel format
+ - ``yuv420p12`` 12-bit HDR pixel format
+ - ``yuv422p12`` 12-bit HDR pixel format
+ - ``yuv444p12`` 12-bit HDR pixel format
rate_control_mode (str):
- Specify the ``rate_control_mode``. The default is ``"vbr"``.
+ Specify the ``rate_control_mode``. The default is ``vbr``.
Supported rate control modes:
- - 'vbr' - variable bitrate
- - 'crf' - constant rate factor
+ - ``vbr`` - variable bitrate
+ - ``crf`` - constant rate factor
crf_level (int):
Target CRF level. Must be between 10 and 36,
where 10 is the highest quality and 36 is the
@@ -1149,7 +1172,7 @@ class Vp9CodecSettings(proto.Message):
frame count. Must be greater than zero.
gop_duration (google.protobuf.duration_pb2.Duration):
Select the GOP size based on the specified duration. The
- default is ``"3s"``. Note that ``gopDuration`` must be less
+ default is ``3s``. Note that ``gopDuration`` must be less
than or equal to ```segmentDuration`` <#SegmentSettings>`__,
and ```segmentDuration`` <#SegmentSettings>`__ must be
divisible by ``gopDuration``.
@@ -1163,10 +1186,10 @@ class Vp9CodecSettings(proto.Message):
- ``profile3``
The available options are
- `WebM-compatible `__\ {:
- class="external" }. Note that certain values for this field
- may cause the transcoder to override other fields you set in
- the ``Vp9CodecSettings`` message.
+ `WebM-compatible `__.
+ Note that certain values for this field may cause the
+ transcoder to override other fields you set in the
+ ``Vp9CodecSettings`` message.
"""
width_pixels = proto.Field(proto.INT32, number=1,)
@@ -1195,18 +1218,19 @@ class Vp9CodecSettings(proto.Message):
class AudioStream(proto.Message):
r"""Audio stream resource.
+
Attributes:
codec (str):
- The codec for this audio stream. The default is ``"aac"``.
+ The codec for this audio stream. The default is ``aac``.
Supported audio codecs:
- - 'aac'
- - 'aac-he'
- - 'aac-he-v2'
- - 'mp3'
- - 'ac3'
- - 'eac3'
+ - ``aac``
+ - ``aac-he``
+ - ``aac-he-v2``
+ - ``mp3``
+ - ``ac3``
+ - ``eac3``
bitrate_bps (int):
Required. Audio bitrate in bits per second.
Must be between 1 and 10,000,000.
@@ -1221,12 +1245,12 @@ class AudioStream(proto.Message):
Supported channel names:
- - 'fl' - Front left channel
- - 'fr' - Front right channel
- - 'sl' - Side left channel
- - 'sr' - Side right channel
- - 'fc' - Front center channel
- - 'lfe' - Low frequency
+ - ``fl`` - Front left channel
+ - ``fr`` - Front right channel
+ - ``sl`` - Side left channel
+ - ``sr`` - Side right channel
+ - ``fc`` - Front center channel
+ - ``lfe`` - Low frequency
mapping (Sequence[google.cloud.video.transcoder_v1.types.AudioStream.AudioMapping]):
The mapping for the ``Job.edit_list`` atoms with audio
``EditAtom.inputs``.
@@ -1281,15 +1305,15 @@ class TextStream(proto.Message):
Attributes:
codec (str):
- The codec for this text stream. The default is ``"webvtt"``.
+ The codec for this text stream. The default is ``webvtt``.
Supported text codecs:
- - 'srt'
- - 'ttml'
- - 'cea608'
- - 'cea708'
- - 'webvtt'
+ - ``srt``
+ - ``ttml``
+ - ``cea608``
+ - ``cea708``
+ - ``webvtt``
mapping (Sequence[google.cloud.video.transcoder_v1.types.TextStream.TextMapping]):
The mapping for the ``Job.edit_list`` atoms with text
``EditAtom.inputs``.
@@ -1319,12 +1343,13 @@ class TextMapping(proto.Message):
class SegmentSettings(proto.Message):
- r"""Segment settings for ``"ts"``, ``"fmp4"`` and ``"vtt"``.
+ r"""Segment settings for ``ts``, ``fmp4`` and ``vtt``.
+
Attributes:
segment_duration (google.protobuf.duration_pb2.Duration):
Duration of the segments in seconds. The default is
- ``"6.0s"``. Note that ``segmentDuration`` must be greater
- than or equal to ```gopDuration`` <#videostream>`__, and
+ ``6.0s``. Note that ``segmentDuration`` must be greater than
+ or equal to ```gopDuration`` <#videostream>`__, and
``segmentDuration`` must be divisible by
```gopDuration`` <#videostream>`__.
individual_segments (bool):
@@ -1338,72 +1363,4 @@ class SegmentSettings(proto.Message):
individual_segments = proto.Field(proto.BOOL, number=3,)
-class Encryption(proto.Message):
- r"""Encryption settings.
- Attributes:
- key (str):
- Required. 128 bit encryption key represented
- as lowercase hexadecimal digits.
- iv (str):
- Required. 128 bit Initialization Vector (IV)
- represented as lowercase hexadecimal digits.
- aes_128 (google.cloud.video.transcoder_v1.types.Encryption.Aes128Encryption):
- Configuration for AES-128 encryption.
- sample_aes (google.cloud.video.transcoder_v1.types.Encryption.SampleAesEncryption):
- Configuration for SAMPLE-AES encryption.
- mpeg_cenc (google.cloud.video.transcoder_v1.types.Encryption.MpegCommonEncryption):
- Configuration for MPEG Common Encryption
- (MPEG-CENC).
- """
-
- class Aes128Encryption(proto.Message):
- r"""Configuration for AES-128 encryption.
- Attributes:
- key_uri (str):
- Required. URI of the key delivery service.
- This URI is inserted into the M3U8 header.
- """
-
- key_uri = proto.Field(proto.STRING, number=1,)
-
- class SampleAesEncryption(proto.Message):
- r"""Configuration for SAMPLE-AES encryption.
- Attributes:
- key_uri (str):
- Required. URI of the key delivery service.
- This URI is inserted into the M3U8 header.
- """
-
- key_uri = proto.Field(proto.STRING, number=1,)
-
- class MpegCommonEncryption(proto.Message):
- r"""Configuration for MPEG Common Encryption (MPEG-CENC).
- Attributes:
- key_id (str):
- Required. 128 bit Key ID represented as
- lowercase hexadecimal digits for use with common
- encryption.
- scheme (str):
- Required. Specify the encryption scheme.
- Supported encryption schemes:
- - 'cenc'
- - 'cbcs'
- """
-
- key_id = proto.Field(proto.STRING, number=1,)
- scheme = proto.Field(proto.STRING, number=2,)
-
- key = proto.Field(proto.STRING, number=1,)
- iv = proto.Field(proto.STRING, number=2,)
- aes_128 = proto.Field(
- proto.MESSAGE, number=3, oneof="encryption_mode", message=Aes128Encryption,
- )
- sample_aes = proto.Field(
- proto.MESSAGE, number=4, oneof="encryption_mode", message=SampleAesEncryption,
- )
- mpeg_cenc = proto.Field(
- proto.MESSAGE, number=5, oneof="encryption_mode", message=MpegCommonEncryption,
- )
-
-
__all__ = tuple(sorted(__protobuf__.manifest))
diff --git a/google/cloud/video/transcoder_v1/types/services.py b/google/cloud/video/transcoder_v1/types/services.py
index edee4f1..4d67e83 100644
--- a/google/cloud/video/transcoder_v1/types/services.py
+++ b/google/cloud/video/transcoder_v1/types/services.py
@@ -37,6 +37,7 @@
class CreateJobRequest(proto.Message):
r"""Request message for ``TranscoderService.CreateJob``.
+
Attributes:
parent (str):
Required. The parent location to create and process this
@@ -81,6 +82,7 @@ class ListJobsRequest(proto.Message):
class GetJobRequest(proto.Message):
r"""Request message for ``TranscoderService.GetJob``.
+
Attributes:
name (str):
Required. The name of the job to retrieve. Format:
@@ -92,17 +94,24 @@ class GetJobRequest(proto.Message):
class DeleteJobRequest(proto.Message):
r"""Request message for ``TranscoderService.DeleteJob``.
+
Attributes:
name (str):
Required. The name of the job to delete. Format:
``projects/{project}/locations/{location}/jobs/{job}``
+ allow_missing (bool):
+ If set to true, and the job is not found, the
+ request will succeed but no action will be taken
+ on the server.
"""
name = proto.Field(proto.STRING, number=1,)
+ allow_missing = proto.Field(proto.BOOL, number=2,)
class ListJobsResponse(proto.Message):
r"""Response message for ``TranscoderService.ListJobs``.
+
Attributes:
jobs (Sequence[google.cloud.video.transcoder_v1.types.Job]):
List of jobs in the specified region.
@@ -123,6 +132,7 @@ def raw_page(self):
class CreateJobTemplateRequest(proto.Message):
r"""Request message for ``TranscoderService.CreateJobTemplate``.
+
Attributes:
parent (str):
Required. The parent location to create this job template.
@@ -147,6 +157,7 @@ class CreateJobTemplateRequest(proto.Message):
class ListJobTemplatesRequest(proto.Message):
r"""Request message for ``TranscoderService.ListJobTemplates``.
+
Attributes:
parent (str):
Required. The parent location from which to retrieve the
@@ -175,6 +186,7 @@ class ListJobTemplatesRequest(proto.Message):
class GetJobTemplateRequest(proto.Message):
r"""Request message for ``TranscoderService.GetJobTemplate``.
+
Attributes:
name (str):
Required. The name of the job template to retrieve. Format:
@@ -186,17 +198,24 @@ class GetJobTemplateRequest(proto.Message):
class DeleteJobTemplateRequest(proto.Message):
r"""Request message for ``TranscoderService.DeleteJobTemplate``.
+
Attributes:
name (str):
Required. The name of the job template to delete.
``projects/{project}/locations/{location}/jobTemplates/{job_template}``
+ allow_missing (bool):
+ If set to true, and the job template is not
+ found, the request will succeed but no action
+ will be taken on the server.
"""
name = proto.Field(proto.STRING, number=1,)
+ allow_missing = proto.Field(proto.BOOL, number=2,)
class ListJobTemplatesResponse(proto.Message):
r"""Response message for ``TranscoderService.ListJobTemplates``.
+
Attributes:
job_templates (Sequence[google.cloud.video.transcoder_v1.types.JobTemplate]):
List of job templates in the specified
diff --git a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/async_client.py b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/async_client.py
index dbdfc03..1929949 100644
--- a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/async_client.py
+++ b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/async_client.py
@@ -775,6 +775,12 @@ async def delete_job_template(
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()
+
try:
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
diff --git a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/client.py b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/client.py
index 96e7c28..a6adc6f 100644
--- a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/client.py
+++ b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/client.py
@@ -371,10 +371,7 @@ def __init__(
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=(
- Transport == type(self).get_transport_class("grpc")
- or Transport == type(self).get_transport_class("grpc_asyncio")
- ),
+ always_use_jwt_access=True,
)
def create_job(
@@ -978,6 +975,19 @@ def delete_job_template(
request, retry=retry, timeout=timeout, metadata=metadata,
)
+ def __enter__(self):
+ 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()
+
try:
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
diff --git a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/base.py b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/base.py
index c938e19..35f9e9b 100644
--- a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/base.py
+++ b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/base.py
@@ -182,6 +182,15 @@ def _prep_wrapped_messages(self, 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 create_job(
self,
diff --git a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/grpc.py b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/grpc.py
index ef8e5c7..4f4f46f 100644
--- a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/grpc.py
+++ b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/grpc.py
@@ -437,5 +437,8 @@ def delete_job_template(
)
return self._stubs["delete_job_template"]
+ def close(self):
+ self.grpc_channel.close()
+
__all__ = ("TranscoderServiceGrpcTransport",)
diff --git a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/grpc_asyncio.py b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/grpc_asyncio.py
index b66a617..2b5324e 100644
--- a/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/grpc_asyncio.py
+++ b/google/cloud/video/transcoder_v1beta1/services/transcoder_service/transports/grpc_asyncio.py
@@ -446,5 +446,8 @@ def delete_job_template(
)
return self._stubs["delete_job_template"]
+ def close(self):
+ return self.grpc_channel.close()
+
__all__ = ("TranscoderServiceGrpcAsyncIOTransport",)
diff --git a/google/cloud/video/transcoder_v1beta1/types/resources.py b/google/cloud/video/transcoder_v1beta1/types/resources.py
index ceeefa0..50341f1 100644
--- a/google/cloud/video/transcoder_v1beta1/types/resources.py
+++ b/google/cloud/video/transcoder_v1beta1/types/resources.py
@@ -49,6 +49,7 @@
class Job(proto.Message):
r"""Transcoding job resource.
+
Attributes:
name (str):
The resource name of the job. Format:
@@ -132,6 +133,7 @@ class ProcessingState(proto.Enum):
class OriginUri(proto.Message):
r"""The origin URI.
+
Attributes:
hls (str):
HLS manifest URI per
@@ -171,6 +173,7 @@ class OriginUri(proto.Message):
class JobTemplate(proto.Message):
r"""Transcoding job template resource.
+
Attributes:
name (str):
The resource name of the job template. Format:
@@ -185,6 +188,7 @@ class JobTemplate(proto.Message):
class JobConfig(proto.Message):
r"""Job configuration
+
Attributes:
inputs (Sequence[google.cloud.video.transcoder_v1beta1.types.Input]):
List of input assets stored in Cloud Storage.
@@ -230,6 +234,7 @@ class JobConfig(proto.Message):
class Input(proto.Message):
r"""Input asset.
+
Attributes:
key (str):
A unique key for this input. Must be
@@ -253,6 +258,7 @@ class Input(proto.Message):
class Output(proto.Message):
r"""Location of output file(s) in a Cloud Storage bucket.
+
Attributes:
uri (str):
URI for the output file(s). For example,
@@ -265,6 +271,7 @@ class Output(proto.Message):
class EditAtom(proto.Message):
r"""Edit atom.
+
Attributes:
key (str):
A unique key for this atom. Must be specified
@@ -294,6 +301,7 @@ class EditAtom(proto.Message):
class AdBreak(proto.Message):
r"""Ad break.
+
Attributes:
start_time_offset (google.protobuf.duration_pb2.Duration):
Start time in seconds for the ad break, relative to the
@@ -336,6 +344,7 @@ class ElementaryStream(proto.Message):
class MuxStream(proto.Message):
r"""Multiplexing settings for output stream.
+
Attributes:
key (str):
A unique key for this multiplexed stream. HLS media
@@ -377,6 +386,7 @@ class MuxStream(proto.Message):
class Manifest(proto.Message):
r"""Manifest configuration.
+
Attributes:
file_name (str):
The name of the generated file. The default is
@@ -407,6 +417,7 @@ class ManifestType(proto.Enum):
class PubsubDestination(proto.Message):
r"""A Pub/Sub destination.
+
Attributes:
topic (str):
The name of the Pub/Sub topic to publish job completion
@@ -506,6 +517,7 @@ class SpriteSheet(proto.Message):
class Overlay(proto.Message):
r"""Overlay configuration.
+
Attributes:
image (google.cloud.video.transcoder_v1beta1.types.Overlay.Image):
Image overlay.
@@ -522,6 +534,7 @@ class FadeType(proto.Enum):
class NormalizedCoordinate(proto.Message):
r"""2D normalized coordinates. Default: ``{0.0, 0.0}``
+
Attributes:
x (float):
Normalized x coordinate.
@@ -534,6 +547,7 @@ class NormalizedCoordinate(proto.Message):
class Image(proto.Message):
r"""Overlaid jpeg image.
+
Attributes:
uri (str):
Required. URI of the JPEG image in Cloud Storage. For
@@ -559,6 +573,7 @@ class Image(proto.Message):
class AnimationStatic(proto.Message):
r"""Display static overlay object.
+
Attributes:
xy (google.cloud.video.transcoder_v1beta1.types.Overlay.NormalizedCoordinate):
Normalized coordinates based on output video resolution.
@@ -581,6 +596,7 @@ class AnimationStatic(proto.Message):
class AnimationFade(proto.Message):
r"""Display overlay object with fade animation.
+
Attributes:
fade_type (google.cloud.video.transcoder_v1beta1.types.Overlay.FadeType):
Required. Type of fade animation: ``FADE_IN`` or
@@ -628,6 +644,7 @@ class AnimationEnd(proto.Message):
class Animation(proto.Message):
r"""Animation types.
+
Attributes:
animation_static (google.cloud.video.transcoder_v1beta1.types.Overlay.AnimationStatic):
Display static overlay object.
@@ -662,6 +679,7 @@ class Animation(proto.Message):
class PreprocessingConfig(proto.Message):
r"""Preprocessing configurations.
+
Attributes:
color (google.cloud.video.transcoder_v1beta1.types.PreprocessingConfig.Color):
Color preprocessing configuration.
@@ -679,6 +697,7 @@ class PreprocessingConfig(proto.Message):
class Color(proto.Message):
r"""Color preprocessing configuration.
+
Attributes:
saturation (float):
Control color saturation of the video. Enter
@@ -703,6 +722,7 @@ class Color(proto.Message):
class Denoise(proto.Message):
r"""Denoise preprocessing configuration.
+
Attributes:
strength (float):
Set strength of the denoise. Enter a value
@@ -723,6 +743,7 @@ class Denoise(proto.Message):
class Deblock(proto.Message):
r"""Deblock preprocessing configuration.
+
Attributes:
strength (float):
Set strength of the deblocker. Enter a value
@@ -738,6 +759,7 @@ class Deblock(proto.Message):
class Audio(proto.Message):
r"""Audio preprocessing configuration.
+
Attributes:
lufs (float):
Specify audio loudness normalization in loudness units
@@ -824,6 +846,7 @@ class Pad(proto.Message):
class VideoStream(proto.Message):
r"""Video stream resource.
+
Attributes:
codec (str):
Codec type. The following codecs are supported:
@@ -978,6 +1001,7 @@ class VideoStream(proto.Message):
class AudioStream(proto.Message):
r"""Audio stream resource.
+
Attributes:
codec (str):
The codec for this audio stream. The default is ``"aac"``.
@@ -1033,6 +1057,7 @@ class AudioAtom(proto.Message):
class AudioChannel(proto.Message):
r"""The audio channel.
+
Attributes:
inputs (Sequence[google.cloud.video.transcoder_v1beta1.types.AudioStream.AudioAtom.AudioChannel.AudioChannelInput]):
List of ``Job.inputs`` for this audio channel.
@@ -1120,6 +1145,7 @@ class TextAtom(proto.Message):
class TextInput(proto.Message):
r"""Identifies which input file and track should be used.
+
Attributes:
key (str):
Required. The ``Input.key`` that identifies the input file.
@@ -1143,6 +1169,7 @@ class TextInput(proto.Message):
class SegmentSettings(proto.Message):
r"""Segment settings for ``"ts"``, ``"fmp4"`` and ``"vtt"``.
+
Attributes:
segment_duration (google.protobuf.duration_pb2.Duration):
Duration of the segments in seconds. The default is
@@ -1163,6 +1190,7 @@ class SegmentSettings(proto.Message):
class Encryption(proto.Message):
r"""Encryption settings.
+
Attributes:
key (str):
Required. 128 bit encryption key represented
@@ -1181,6 +1209,7 @@ class Encryption(proto.Message):
class Aes128Encryption(proto.Message):
r"""Configuration for AES-128 encryption.
+
Attributes:
key_uri (str):
Required. URI of the key delivery service.
@@ -1191,6 +1220,7 @@ class Aes128Encryption(proto.Message):
class SampleAesEncryption(proto.Message):
r"""Configuration for SAMPLE-AES encryption.
+
Attributes:
key_uri (str):
Required. URI of the key delivery service.
@@ -1201,6 +1231,7 @@ class SampleAesEncryption(proto.Message):
class MpegCommonEncryption(proto.Message):
r"""Configuration for MPEG Common Encryption (MPEG-CENC).
+
Attributes:
key_id (str):
Required. 128 bit Key ID represented as
@@ -1231,6 +1262,7 @@ class MpegCommonEncryption(proto.Message):
class Progress(proto.Message):
r"""Estimated fractional progress for each step, from ``0`` to ``1``.
+
Attributes:
analyzed (float):
Estimated fractional progress for ``analyzing`` step.
@@ -1250,6 +1282,7 @@ class Progress(proto.Message):
class FailureDetail(proto.Message):
r"""Additional information about the reasons for the failure.
+
Attributes:
description (str):
A description of the failure.
diff --git a/google/cloud/video/transcoder_v1beta1/types/services.py b/google/cloud/video/transcoder_v1beta1/types/services.py
index 4255a53..fe23b03 100644
--- a/google/cloud/video/transcoder_v1beta1/types/services.py
+++ b/google/cloud/video/transcoder_v1beta1/types/services.py
@@ -37,6 +37,7 @@
class CreateJobRequest(proto.Message):
r"""Request message for ``TranscoderService.CreateJob``.
+
Attributes:
parent (str):
Required. The parent location to create and process this
@@ -72,6 +73,7 @@ class ListJobsRequest(proto.Message):
class GetJobRequest(proto.Message):
r"""Request message for ``TranscoderService.GetJob``.
+
Attributes:
name (str):
Required. The name of the job to retrieve. Format:
@@ -83,6 +85,7 @@ class GetJobRequest(proto.Message):
class DeleteJobRequest(proto.Message):
r"""Request message for ``TranscoderService.DeleteJob``.
+
Attributes:
name (str):
Required. The name of the job to delete. Format:
@@ -94,6 +97,7 @@ class DeleteJobRequest(proto.Message):
class ListJobsResponse(proto.Message):
r"""Response message for ``TranscoderService.ListJobs``.
+
Attributes:
jobs (Sequence[google.cloud.video.transcoder_v1beta1.types.Job]):
List of jobs in the specified region.
@@ -111,6 +115,7 @@ def raw_page(self):
class CreateJobTemplateRequest(proto.Message):
r"""Request message for ``TranscoderService.CreateJobTemplate``.
+
Attributes:
parent (str):
Required. The parent location to create this job template.
@@ -135,6 +140,7 @@ class CreateJobTemplateRequest(proto.Message):
class ListJobTemplatesRequest(proto.Message):
r"""Request message for ``TranscoderService.ListJobTemplates``.
+
Attributes:
parent (str):
Required. The parent location from which to retrieve the
@@ -154,6 +160,7 @@ class ListJobTemplatesRequest(proto.Message):
class GetJobTemplateRequest(proto.Message):
r"""Request message for ``TranscoderService.GetJobTemplate``.
+
Attributes:
name (str):
Required. The name of the job template to retrieve. Format:
@@ -165,6 +172,7 @@ class GetJobTemplateRequest(proto.Message):
class DeleteJobTemplateRequest(proto.Message):
r"""Request message for ``TranscoderService.DeleteJobTemplate``.
+
Attributes:
name (str):
Required. The name of the job template to delete.
@@ -176,6 +184,7 @@ class DeleteJobTemplateRequest(proto.Message):
class ListJobTemplatesResponse(proto.Message):
r"""Response message for ``TranscoderService.ListJobTemplates``.
+
Attributes:
job_templates (Sequence[google.cloud.video.transcoder_v1beta1.types.JobTemplate]):
List of job templates in the specified
diff --git a/noxfile.py b/noxfile.py
index 93ea9b1..f885c68 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -29,7 +29,7 @@
DEFAULT_PYTHON_VERSION = "3.8"
SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"]
-UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9"]
+UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9", "3.10"]
CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
diff --git a/setup.py b/setup.py
index 9332c7e..4d79dbd 100644
--- a/setup.py
+++ b/setup.py
@@ -19,7 +19,7 @@
import os
import setuptools # type: ignore
-version = "1.0.1"
+version = "1.1.0"
package_root = os.path.abspath(os.path.dirname(__file__))
diff --git a/tests/unit/gapic/transcoder_v1/test_transcoder_service.py b/tests/unit/gapic/transcoder_v1/test_transcoder_service.py
index 8bb42af..44a2468 100644
--- a/tests/unit/gapic/transcoder_v1/test_transcoder_service.py
+++ b/tests/unit/gapic/transcoder_v1/test_transcoder_service.py
@@ -29,6 +29,7 @@
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 path_template
from google.auth import credentials as ga_credentials
from google.auth.exceptions import MutualTLSChannelError
from google.cloud.video.transcoder_v1.services.transcoder_service import (
@@ -2594,6 +2595,9 @@ def test_transcoder_service_base_transport():
with pytest.raises(NotImplementedError):
getattr(transport, method)(request=object())
+ with pytest.raises(NotImplementedError):
+ transport.close()
+
@requires_google_auth_gte_1_25_0
def test_transcoder_service_base_transport_with_credentials_file():
@@ -3100,3 +3104,49 @@ def test_client_withDEFAULT_CLIENT_INFO():
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 = TranscoderServiceAsyncClient(
+ 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 = {
+ "grpc": "_grpc_channel",
+ }
+
+ for transport, close_name in transports.items():
+ client = TranscoderServiceClient(
+ 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 = [
+ "grpc",
+ ]
+ for transport in transports:
+ client = TranscoderServiceClient(
+ 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()
diff --git a/tests/unit/gapic/transcoder_v1beta1/test_transcoder_service.py b/tests/unit/gapic/transcoder_v1beta1/test_transcoder_service.py
index bece6f5..83c15c4 100644
--- a/tests/unit/gapic/transcoder_v1beta1/test_transcoder_service.py
+++ b/tests/unit/gapic/transcoder_v1beta1/test_transcoder_service.py
@@ -29,6 +29,7 @@
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 path_template
from google.auth import credentials as ga_credentials
from google.auth.exceptions import MutualTLSChannelError
from google.cloud.video.transcoder_v1beta1.services.transcoder_service import (
@@ -2598,6 +2599,9 @@ def test_transcoder_service_base_transport():
with pytest.raises(NotImplementedError):
getattr(transport, method)(request=object())
+ with pytest.raises(NotImplementedError):
+ transport.close()
+
@requires_google_auth_gte_1_25_0
def test_transcoder_service_base_transport_with_credentials_file():
@@ -3104,3 +3108,49 @@ def test_client_withDEFAULT_CLIENT_INFO():
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 = TranscoderServiceAsyncClient(
+ 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 = {
+ "grpc": "_grpc_channel",
+ }
+
+ for transport, close_name in transports.items():
+ client = TranscoderServiceClient(
+ 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 = [
+ "grpc",
+ ]
+ for transport in transports:
+ client = TranscoderServiceClient(
+ 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()