Skip to content
This repository has been archived by the owner on Sep 20, 2023. It is now read-only.

feat: add context manager support in client #224

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -451,6 +451,12 @@ async def review_document(
# Done; return the response.
return response

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(
Expand Down
Expand Up @@ -369,10 +369,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 process_document(
Expand Down Expand Up @@ -615,6 +612,19 @@ def review_document(
# Done; return the response.
return response

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(
Expand Down
Expand Up @@ -203,6 +203,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 operations_client(self) -> operations_v1.OperationsClient:
"""Return the client designed to process long-running operations."""
Expand Down
Expand Up @@ -333,5 +333,8 @@ def review_document(
)
return self._stubs["review_document"]

def close(self):
self.grpc_channel.close()


__all__ = ("DocumentProcessorServiceGrpcTransport",)
Expand Up @@ -340,5 +340,8 @@ def review_document(
)
return self._stubs["review_document"]

def close(self):
return self.grpc_channel.close()


__all__ = ("DocumentProcessorServiceGrpcAsyncIOTransport",)
15 changes: 15 additions & 0 deletions google/cloud/documentai_v1/types/document.py
Expand Up @@ -135,6 +135,7 @@ class Style(proto.Message):

class FontSize(proto.Message):
r"""Font size with unit.

Attributes:
size (float):
Font size for the text.
Expand Down Expand Up @@ -162,6 +163,7 @@ class FontSize(proto.Message):

class Page(proto.Message):
r"""A page in a [Document][google.cloud.documentai.v1.Document].

Attributes:
page_number (int):
1-based index for current
Expand Down Expand Up @@ -218,6 +220,7 @@ class Page(proto.Message):

class Dimension(proto.Message):
r"""Dimension for the page.

Attributes:
width (float):
Page width.
Expand All @@ -233,6 +236,7 @@ class Dimension(proto.Message):

class Image(proto.Message):
r"""Rendered image contents for this page.

Attributes:
content (bytes):
Raw byte content of the image.
Expand Down Expand Up @@ -275,6 +279,7 @@ class Matrix(proto.Message):

class Layout(proto.Message):
r"""Visual element describing a layout unit on a page.

Attributes:
text_anchor (google.cloud.documentai_v1.types.Document.TextAnchor):
Text anchor indexing into the
Expand Down Expand Up @@ -391,6 +396,7 @@ class Line(proto.Message):

class Token(proto.Message):
r"""A detected token.

Attributes:
layout (google.cloud.documentai_v1.types.Document.Page.Layout):
[Layout][google.cloud.documentai.v1.Document.Page.Layout]
Expand Down Expand Up @@ -465,6 +471,7 @@ class VisualElement(proto.Message):

class Table(proto.Message):
r"""A table representation similar to HTML table structure.

Attributes:
layout (google.cloud.documentai_v1.types.Document.Page.Layout):
[Layout][google.cloud.documentai.v1.Document.Page.Layout]
Expand All @@ -480,6 +487,7 @@ class Table(proto.Message):

class TableRow(proto.Message):
r"""A row of table cells.

Attributes:
cells (Sequence[google.cloud.documentai_v1.types.Document.Page.Table.TableCell]):
Cells that make up this row.
Expand All @@ -491,6 +499,7 @@ class TableRow(proto.Message):

class TableCell(proto.Message):
r"""A cell representation inside the table.

Attributes:
layout (google.cloud.documentai_v1.types.Document.Page.Layout):
[Layout][google.cloud.documentai.v1.Document.Page.Layout]
Expand Down Expand Up @@ -529,6 +538,7 @@ class TableCell(proto.Message):

class FormField(proto.Message):
r"""A form field detected on the page.

Attributes:
field_name (google.cloud.documentai_v1.types.Document.Page.Layout):
[Layout][google.cloud.documentai.v1.Document.Page.Layout]
Expand Down Expand Up @@ -577,6 +587,7 @@ class FormField(proto.Message):

class DetectedLanguage(proto.Message):
r"""Detected language for a structural component.

Attributes:
language_code (str):
The BCP-47 language code, such as "en-US" or "sr-Latn". For
Expand Down Expand Up @@ -671,6 +682,7 @@ class Entity(proto.Message):

class NormalizedValue(proto.Message):
r"""Parsed and normalized entity value.

Attributes:
money_value (google.type.money_pb2.Money):
Money value. See also:
Expand Down Expand Up @@ -934,6 +946,7 @@ class Parent(proto.Message):

class Revision(proto.Message):
r"""Contains past or forward revisions of this document.

Attributes:
agent (str):
If the change was made by a person specify
Expand All @@ -956,6 +969,7 @@ class Revision(proto.Message):

class HumanReview(proto.Message):
r"""Human Review information of the document.

Attributes:
state (str):
Human review state. e.g. ``requested``, ``succeeded``,
Expand All @@ -982,6 +996,7 @@ class HumanReview(proto.Message):

class TextChange(proto.Message):
r"""This message is used for text changes aka. OCR corrections.

Attributes:
text_anchor (google.cloud.documentai_v1.types.Document.TextAnchor):
Provenance of the correction. Text anchor indexing into the
Expand Down
4 changes: 4 additions & 0 deletions google/cloud/documentai_v1/types/document_io.py
Expand Up @@ -31,6 +31,7 @@

class RawDocument(proto.Message):
r"""Payload message of raw document content (bytes).

Attributes:
content (bytes):
Inline document content.
Expand All @@ -45,6 +46,7 @@ class RawDocument(proto.Message):

class GcsDocument(proto.Message):
r"""Specifies a document stored on Cloud Storage.

Attributes:
gcs_uri (str):
The Cloud Storage object uri.
Expand All @@ -58,6 +60,7 @@ class GcsDocument(proto.Message):

class GcsDocuments(proto.Message):
r"""Specifies a set of documents on Cloud Storage.

Attributes:
documents (Sequence[google.cloud.documentai_v1.types.GcsDocument]):
The list of documents.
Expand Down Expand Up @@ -111,6 +114,7 @@ class DocumentOutputConfig(proto.Message):

class GcsOutputConfig(proto.Message):
r"""The configuration used when outputting documents.

Attributes:
gcs_uri (str):
The Cloud Storage uri (a directory) of the
Expand Down
10 changes: 9 additions & 1 deletion google/cloud/documentai_v1/types/document_processor_service.py
Expand Up @@ -40,6 +40,7 @@

class ProcessRequest(proto.Message):
r"""Request message for the process document method.

Attributes:
inline_document (google.cloud.documentai_v1.types.Document):
An inline document proto.
Expand All @@ -64,6 +65,7 @@ class ProcessRequest(proto.Message):

class HumanReviewStatus(proto.Message):
r"""The status of human review on a processed document.

Attributes:
state (google.cloud.documentai_v1.types.HumanReviewStatus.State):
The state of human review on the processing
Expand Down Expand Up @@ -94,6 +96,7 @@ class State(proto.Enum):

class ProcessResponse(proto.Message):
r"""Response message for the process document method.

Attributes:
document (google.cloud.documentai_v1.types.Document):
The document payload, will populate fields
Expand All @@ -111,6 +114,7 @@ class ProcessResponse(proto.Message):

class BatchProcessRequest(proto.Message):
r"""Request message for batch process document method.

Attributes:
name (str):
Required. The processor resource name.
Expand All @@ -134,11 +138,13 @@ class BatchProcessRequest(proto.Message):


class BatchProcessResponse(proto.Message):
r"""Response message for batch process document method. """
r"""Response message for batch process document method.
"""


class BatchProcessMetadata(proto.Message):
r"""The long running operation metadata for batch process method.

Attributes:
state (google.cloud.documentai_v1.types.BatchProcessMetadata.State):
The state of the current batch processing.
Expand Down Expand Up @@ -205,6 +211,7 @@ class IndividualProcessStatus(proto.Message):

class ReviewDocumentRequest(proto.Message):
r"""Request message for review document method.

Attributes:
inline_document (google.cloud.documentai_v1.types.Document):
An inline document proto.
Expand Down Expand Up @@ -234,6 +241,7 @@ class Priority(proto.Enum):

class ReviewDocumentResponse(proto.Message):
r"""Response message for review document method.

Attributes:
gcs_destination (str):
The Cloud Storage uri for the human reviewed
Expand Down
1 change: 1 addition & 0 deletions google/cloud/documentai_v1/types/geometry.py
Expand Up @@ -58,6 +58,7 @@ class NormalizedVertex(proto.Message):

class BoundingPoly(proto.Message):
r"""A bounding polygon for the detected image annotation.

Attributes:
vertices (Sequence[google.cloud.documentai_v1.types.Vertex]):
The bounding polygon vertices.
Expand Down
1 change: 1 addition & 0 deletions google/cloud/documentai_v1/types/operation_metadata.py
Expand Up @@ -25,6 +25,7 @@

class CommonOperationMetadata(proto.Message):
r"""The common metadata for long running operations.

Attributes:
state (google.cloud.documentai_v1.types.CommonOperationMetadata.State):
The state of the operation.
Expand Down
Expand Up @@ -328,6 +328,12 @@ async def process_document(
# Done; return the response.
return response

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(
Expand Down
Expand Up @@ -340,10 +340,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 batch_process_documents(
Expand Down Expand Up @@ -485,6 +482,19 @@ def process_document(
# Done; return the response.
return response

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(
Expand Down
Expand Up @@ -189,6 +189,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 operations_client(self) -> operations_v1.OperationsClient:
"""Return the client designed to process long-running operations."""
Expand Down
Expand Up @@ -300,5 +300,8 @@ def process_document(
)
return self._stubs["process_document"]

def close(self):
self.grpc_channel.close()


__all__ = ("DocumentUnderstandingServiceGrpcTransport",)
Expand Up @@ -310,5 +310,8 @@ def process_document(
)
return self._stubs["process_document"]

def close(self):
return self.grpc_channel.close()


__all__ = ("DocumentUnderstandingServiceGrpcAsyncIOTransport",)