From e5835f4b514b2b463478df33505ac08272a99fb7 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 17 Jan 2023 11:57:49 -0800 Subject: [PATCH] feat: exposed GetProcessorType to v1beta3 (#444) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: exposed GetProcessorType to v1beta3 PiperOrigin-RevId: 502616281 Source-Link: https://github.com/googleapis/googleapis/commit/04e6db97c2cbc65141e044029b2e35a70615dc92 Source-Link: https://github.com/googleapis/googleapis-gen/commit/f4bc77f905e68057db09b78397afbddb9b86c80e Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZjRiYzc3ZjkwNWU2ODA1N2RiMDliNzgzOTdhZmJkZGI5Yjg2YzgwZSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot --- documentai-v1beta3-py.tar.gz | Bin 0 -> 65536 bytes google/cloud/documentai_v1beta3/__init__.py | 2 + .../documentai_v1beta3/gapic_metadata.json | 10 + .../async_client.py | 106 +++++++ .../document_processor_service/client.py | 106 +++++++ .../transports/base.py | 15 + .../transports/grpc.py | 30 ++ .../transports/grpc_asyncio.py | 30 ++ .../documentai_v1beta3/types/__init__.py | 2 + .../types/document_processor_service.py | 15 + ...cessor_service_get_processor_type_async.py | 52 ++++ ...ocessor_service_get_processor_type_sync.py | 52 ++++ ...t_metadata_google.cloud.documentai.v1.json | 2 +- ...adata_google.cloud.documentai.v1beta2.json | 2 +- ...adata_google.cloud.documentai.v1beta3.json | 163 ++++++++++- scripts/fixup_documentai_v1beta3_keywords.py | 1 + .../test_document_processor_service.py | 269 ++++++++++++++++++ 17 files changed, 854 insertions(+), 3 deletions(-) create mode 100644 documentai-v1beta3-py.tar.gz create mode 100644 samples/generated_samples/documentai_v1beta3_generated_document_processor_service_get_processor_type_async.py create mode 100644 samples/generated_samples/documentai_v1beta3_generated_document_processor_service_get_processor_type_sync.py diff --git a/documentai-v1beta3-py.tar.gz b/documentai-v1beta3-py.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..5b7db2c65ea86acb91ed7a6d78ef880be7476449 GIT binary patch literal 65536 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%0D9lnarM9`C|d z3~A*=eZFt)c{jK*h6P_%x;2qBH@Gonq7bt+qlwp1x;@8PXMJ^AvAFGeZR4)r(Xe)P z8PVLjnZ8-NKF{#CMy41l!`CV8z*%^{#v20($u53XRtAol$=FQC1$jne0LU#6bR3p; zB3IicS11pA=X)1)K&BTe#x{@zX};oJY_2RNu+^{oqDx#!JE-)46bL?=#FY;de|vzE zdG*UrZDUixFHzBC7Hv2zmck@Vb!n5Js_~?bHufP(6B;8!m>Lb@V*_}Jp-}?T#dts?uopUNl9O_!j7LRN^CpM$rZUqDQ zjbpCpU<1G^el2d|{qXo9oMmsIi(`9+{EO4tOEFsaA9D1k8=zQ5!T0y(GPdjd^q;8g z7X+tCmQbLkT{5SR25B-21|&eC>nHvDUR;jbT#x61#+LtfG>4aft^v6NpA^7xL#9dd zR{`tOB_Xb;wLv86c$kisu9FSZbhcR|%MJ9XFYQ&QsvG^NJ8LV(48e+!u`Fcaaxf($k~ z;UjK?j(sx4aZ+?ygxT5xlZ=QK67F(Q$y8v_;+bSL7o-(Kj)kOSVN9~;@NIISJJmKT zW6;&2yo2XrZS)JLB2$BCpzWlnA_}H*?;Y_&s)-TehXe7G zN`GOB=v_@%EyJej51^{!HUb|9(wXMFjDlx~>E8^i#Dbm)zwpFJxl#X0$-F8#v%a0dTXu zIn*W^FE;D_D4Sni@7X^D`yM?~#>o1UI)2`^VxUxylsJ1+5?G9reS_D@#J{Wl=if{{ z&e7H1^wpVFyeCQmU-!zZB}`M=g+1;~J-=#!7(Qnv$H~TnaK9lYjgM{gL!$|7^SCv3 zY%_ZWhq>)lFTyp9?tQe1(wsSWY!KT_&sk07@>j~SVy_EJ|L~P(V}14e>iPaI#SfD0 z{?bAwnnK8(GBDEfkufQb^}kjCyE@maE6o5wKUtNA$8%Ys{=(bG6aEv#FEe8GJ$k&M z=5krNpyk|HHX3YMat?)E_pH!DjG;`%B zWmoBgP;Q}*l|{^O8x?*6O8XRX_njRJo(}a_mMFvN;xV2HJT9_>0l=13R|tCpo_}}0 zPoh4CC&%UCCS*|xGp$apMW*&Z&etp1%&?_;S3u^`-bcYATJ!Rro-=OH6xjFs4X>2Gu6| zk5C%fxGB54yF1uRhQU_h=XgBSaAvZry`njz-YC_7Jp*kWpBHK7YnG+G2g}SevhE&r z|7GbeY~yxrjb}L27>DW#xD_$-7vO*pMUkBuBP_K3HaMs{_@Fc5} zleF@is-+}nPM5@Mq#og>;bc}u{0ULJ#Ap>AV8M}WkbK3s;GTr1`z)0;(1Q1yxXw8k zw6yZ*c&fB)D=Ju0syGkn<(8nB?desZP-`KE_hU^)L7H3_7fpBl9SLF9a|5UMs8JqO z)AQzjkPQ=j?I_HHUdgPU2!C{mNAyEA&$fLi9jnzZ(;*Kt5!vE-s2<3pDZ{d{2*cwb zPEC#H)P1UQ(ZmlUSs6ymO5X?bL>S+8QUV%(@QTy*-LP$|y>&Uw%Zg_-Ar>N5Z=4&| zsV`ktug|AMKTwNj-+9gyA|=Xs3aa&#Z7;uy!!+i|+6k zj8b_SERDH$A-t+Say~5EZJV{!P;pYFCr7)T@eIdQ_(A;jD^nkG)A17FPHhAJ8jNVR z_!mjPszIi{JT}XK@v)2>`5$sSPFUEHwZdIMO6s`8VBSbPj4|KNsqWlNQ0__K(|WATt2!feVgl{ve|Ot1y!%-K>rd#+e>>sFVanl=EFdi6jSMtV%Umahe^W z+(^dm9)@7jq$1BipBPe%QI^*=$0%%!|0!}ETsU3R-+?m`>KYE+?6jyZk=r=OWNawUK7Hgqf?!F?BjO^slr(@Z4xhhi<=il$@C72$(*AN7^^!c- zM7!qRpk1hE!-&8$lph8L{I`brT^a~KA((^ z1#j{I|9%}RXxEW1xUOaE{}vEyAfn%+vbDnBs-KX5N&QE7I}H00h*0;xz2L^+Pb0n< zfZckcknzr}6%Po->f)My@Xw}N^}QHLtS^s@TwdC97yUma#94|(CxxA4q(1L&$*AVI zTQFr(fD$zII3uW5>)6&yKG8q=2d&?sz{bJMXfZPB8ir1crq5vA{P}d&c;TOvwL$9psVEgf(3;zk`!316ql6*6}jci(}K!zY_@|`rc-mfwLpTiQ8V9ku5A;Mcf-5qp0G|0#)rXh+s}2%Yzi3NOO| zk7n9UT(^uB{=x#``|-DKzD>{6?mG}|HrCln_W43DeQtpmb_ols)HgRGlM6O@YZcpY zwFiF-#vkhI*GJmR!-*LOb&xqL2$Gi`>q&2A&VDXjd=*5n8#MxPym-_=mMr=w}ngRB&!HAdcMOylH=v^k7ZxS zzm-1~T2#=5KHIe94)UuM!?ICvk&?Kh)ov@(q}tc{1i;c==vjXcdn&GhzanV8d>IYX z@*x69YvA^uUXnn+^GERamwqbyR*ejw-PU%J0PmidZR^BgS&46>E)+?R<|*Z)HlLQk z+J7;=s#GY`W4U=qlGDqC25cd~!D6MF0s}fc)f`S_ia79eRc6alX_Q{ZDD+x~DH{Z2 z@wgWpf;9AL`rk>LnGz|EHQ1nf9D`^iF2d!^U4FmR;qwXT-{6}!W5W;5BqQOhaa0x! z?Mzuf(-kt(!&X44*-Ye1ROz;)j9cOu-LKi{|9~86JZI>0(h2b`Ir=FO5+h3$qTlWA zb0NNs^5)XTEZQ!U#qG#qF-+eihgz^U2^oN;XF=2Ms>&p370xh_II7ZPbPwGuCsR%@ zaDb&<=S}vg>0Bw0&^rD~e-&AfNt#F6V4EvB3vFn)%iXy)S1X`64H?j%kyWb!nf^Un zf)}1}(nb9rd?_L}93LFDcSw}f8%Gw91wmbkLZkanJ+jRo!90Q|8TOEWHjaKRlKRFh zM;-Hk7xALP*JKXY-(%e;yLP{YR7BkPr+;j7e{llz2*CA}^b_hv6Cj=E$y= zOIn+N9GMfjZ8t?Fu7!~G6us>5%fC?H{LyTXGh9ENA}%gqpcX9=u8=+vDT;!A(w9Q$ zAL55ErX`o`3gd<5?9x7_+X+SY4_95jCIc%G9~Kj1s|{@wck-;udF31C(J}=0$YC?* zdIcrSaRln=(H9Ta2hljHn_skB1F~v*K-L*%QhPKx>0jX5e%0(J6r~Rn*j27;%|v-;s#0MDxu+HLs+ncA={ax*_$33FwQoEBJ^@MNIvj95Z^5 zz8&2zib-TE{=@_7UECkf*zNSi@SV+XFOiC>LP*6wHmmM0;Qg#YcVUbU!< z3%P2N9B7!Y6cvrjzo;c2g?M0uMk1<%TCylD_~{Fj&D+{jwEBg2X*1A-Dy(wrHnv zG0FsI9Cp&rK0HlZgl>|bOP{a(Z+jnF1Ay;uj3b~PM~{lDPS^$)k zy?$QXIlh6zEa#gX?uK2=jVVb}{YEwe5eOS+IxaK{L#x5<4SM+L-y#p-T(M2tjCLY|ZHb&qVMBfQC24%sB{mxV-*=1nyaaM~Ra@F9V)=w2>qm~(#{zq73 z7oakkDMU?Zy*LRk4Ih{WpV%zOA-20ATI8#vkNT1ENycx~>X3P9oI0-}Q&OLx>lYiY z>Y$xzXhl7d7WrGl0?(h(N^jrTrM1es{Y`JL3A-`Q4{Hf$W5Q(ih}L4;j(L)_*~kws zn*qu|iv+P>OH!!v@Sz3wL(|O3rll27D3(WcO539Mw<_zC!9=X)r&8Q=-6~O$M^Kuc z7j+DUWpM@!edYp#m#0H1^m9F2$FR~t2!jK$4Gv=N$lhvHWoDSNG)0ZxM{INsHY@EG zvi#=SO@MyUZL3OWEt&E=8UGKshJT0n8JGJMAE5)f$Tz5-T*}Z*+OS z_vBc#`#x6Y#~DalA2<&tz^RQ}=|eV58wIYo6qPl*3QzhJRIC9FJ83~f2~2L)cpvpM zDHs34-Q&*46>#@N#PlR)?$%jan zt8e3>#Abli%=z62Of4g5971!XWumtNdR!uAhX2&p(PQrxF8Y}mkn6JO;86d2Bio^FU)ltg(crbF5WY6a^r|2;B8}q*{$p2FMF`NHO>Ax?(h8d@8 z{fE-87X4pJe^u$fl)kTIS9J@=|4{l@!>PqS-v6caJLkV*_Y9x9W8e0nCTms=7nl{pi0cmqWBG|4( zu+@1v{v_Q2WQ*q892!Lb1Ukx8bOrVLZyyC3PA`mrT5fw|B0)>!p4x_<+?}=BEUYWS zy|txADiOL(LKdK15@2Nt!ShYqYaq(HC)d6`$$R=6aONv|v(@?>_~$OU8f4e%e^Dw2 zbnMyWSO%4@kZiTw1>()bXn|W{1xeC?Ju9wWs-M&DgD`f0iZtL06QF0|ZvX9Zkhwt0 z`F0RGOY=wI{o7;bGN?7VGzC=s;dltT_osUmZudK0fG9}?2?xVj9e&k`WSk49VzYFA zZ2$AS?@0koc-019IHzdM|GVrQS{U0AJ!1mM>+j)U6QA z?*d&hw187T{6DuHdIGnPKzic~(IBl4X0eZZehgU{lH=1&7{G!POJvzPIwK<(Pdsfr zO*NCe4#`LEj{P$;a~_(!r`$7F0v72Yn&;O>7Rdc>j}wTUJ6j#C{33qy)t0b(=-!4! zNDRLG#h`qI#9QX}Y|1ZCY`O$Q_?P)dM;Vmt3-zi&1iFK-sN!Qp5Jq1Q@}L0#5w9r> zj^T$nFPjytmEzbXYnnV4B}t@P_62mkdr}xP7=cK&eEqZ!U>9dTv7iUBZ}yJrd0MNX zKG7^j$9th)DEecq57;f6%d#T-`s14{o#SAgf_e9lGvvxg@@|HzGWJfU;jOy$L=3#v z3Ek(bDxYQ8u+VhD58kpQ((0 zGCOCvt3wESRRCEU4@*34ZzR*oPsm+LWKOLsx6m5(<&dzNF?JG?A@d2Q{J_0YpCIL5 z#P(uVetFiXfPEDC18lcc(A=ghY>@H%3e$RYpe0R6({;qy30roolpL~Z7*Pg*`fuG< zBq}fR!$5#=I<6TnS4Bj4VW-@!Wec8Dzks{A(d_HPrY0s2qiqIavGLg-vEVX0I5G9T zY^GAp7M1IzrzBF92@XaT$&3#0J>v?gl`)zML)zwHp5Rkd-@Jo@y-Pbf44gK_4oZIp`@DtDN8HN@2%e!4lYLqDOT$&EPAG z#~M~m>;>}5`=N?3un9ZbBGoX_nB#=z2opem$+hy01Z2Nx+-#_N@y)GAuL!~0N4j&_ z(V20{L^r$;QR(pxBkL-tTgkc(GSxb<5z6MvfPe4q#}ob5j@LK)$AzDR3(ep0Eq-4! z0vKHa9+(RCQQ%88Vq@ar+&Op~FO4YQP~N{SZ{lWuXh9Zm_2Eow;jNk;k9k^>18bTL zyyMNkN%egkT(6=77qF^N>A9*IV(3yT9pLFujR|TsBeEdYhGAJzOQ3*R^^UP$K7qIc?adWy-H%qnJ~ u?H=fnotpiuvW=h_hfi2Qpa}n3d{Ib8VqfZ!2pBaJ*2%6#oy3mU+Se literal 0 HcmV?d00001 diff --git a/google/cloud/documentai_v1beta3/__init__.py b/google/cloud/documentai_v1beta3/__init__.py index ca5d1d24..a6015e24 100644 --- a/google/cloud/documentai_v1beta3/__init__.py +++ b/google/cloud/documentai_v1beta3/__init__.py @@ -58,6 +58,7 @@ FetchProcessorTypesResponse, GetEvaluationRequest, GetProcessorRequest, + GetProcessorTypeRequest, GetProcessorVersionRequest, HumanReviewStatus, ListEvaluationsRequest, @@ -129,6 +130,7 @@ "GcsPrefix", "GetEvaluationRequest", "GetProcessorRequest", + "GetProcessorTypeRequest", "GetProcessorVersionRequest", "HumanReviewStatus", "ListEvaluationsRequest", diff --git a/google/cloud/documentai_v1beta3/gapic_metadata.json b/google/cloud/documentai_v1beta3/gapic_metadata.json index c2f2d879..f94368f8 100644 --- a/google/cloud/documentai_v1beta3/gapic_metadata.json +++ b/google/cloud/documentai_v1beta3/gapic_metadata.json @@ -65,6 +65,11 @@ "get_processor" ] }, + "GetProcessorType": { + "methods": [ + "get_processor_type" + ] + }, "GetProcessorVersion": { "methods": [ "get_processor_version" @@ -175,6 +180,11 @@ "get_processor" ] }, + "GetProcessorType": { + "methods": [ + "get_processor_type" + ] + }, "GetProcessorVersion": { "methods": [ "get_processor_version" diff --git a/google/cloud/documentai_v1beta3/services/document_processor_service/async_client.py b/google/cloud/documentai_v1beta3/services/document_processor_service/async_client.py index f5bd693e..e8f34179 100644 --- a/google/cloud/documentai_v1beta3/services/document_processor_service/async_client.py +++ b/google/cloud/documentai_v1beta3/services/document_processor_service/async_client.py @@ -42,6 +42,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api import launch_stage_pb2 # type: ignore from google.api_core import operation # type: ignore from google.api_core import operation_async # type: ignore from google.cloud.location import locations_pb2 # type: ignore @@ -753,6 +754,111 @@ async def sample_list_processor_types(): # Done; return the response. return response + async def get_processor_type( + self, + request: Optional[ + Union[document_processor_service.GetProcessorTypeRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> processor_type.ProcessorType: + r"""Gets a processor type detail. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import documentai_v1beta3 + + async def sample_get_processor_type(): + # Create a client + client = documentai_v1beta3.DocumentProcessorServiceAsyncClient() + + # Initialize request argument(s) + request = documentai_v1beta3.GetProcessorTypeRequest( + name="name_value", + ) + + # Make the request + response = await client.get_processor_type(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.documentai_v1beta3.types.GetProcessorTypeRequest, dict]]): + The request object. Request message for get processor. + name (:class:`str`): + Required. The processor type resource + name. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.documentai_v1beta3.types.ProcessorType: + A processor type is responsible for + performing a certain document + understanding task on a certain type of + document. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = document_processor_service.GetProcessorTypeRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_processor_type, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + async def list_processors( self, request: Optional[ diff --git a/google/cloud/documentai_v1beta3/services/document_processor_service/client.py b/google/cloud/documentai_v1beta3/services/document_processor_service/client.py index 887267d8..77f1fe8e 100644 --- a/google/cloud/documentai_v1beta3/services/document_processor_service/client.py +++ b/google/cloud/documentai_v1beta3/services/document_processor_service/client.py @@ -46,6 +46,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api import launch_stage_pb2 # type: ignore from google.api_core import operation # type: ignore from google.api_core import operation_async # type: ignore from google.cloud.location import locations_pb2 # type: ignore @@ -1029,6 +1030,111 @@ def sample_list_processor_types(): # Done; return the response. return response + def get_processor_type( + self, + request: Optional[ + Union[document_processor_service.GetProcessorTypeRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> processor_type.ProcessorType: + r"""Gets a processor type detail. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import documentai_v1beta3 + + def sample_get_processor_type(): + # Create a client + client = documentai_v1beta3.DocumentProcessorServiceClient() + + # Initialize request argument(s) + request = documentai_v1beta3.GetProcessorTypeRequest( + name="name_value", + ) + + # Make the request + response = client.get_processor_type(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.documentai_v1beta3.types.GetProcessorTypeRequest, dict]): + The request object. Request message for get processor. + name (str): + Required. The processor type resource + name. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.documentai_v1beta3.types.ProcessorType: + A processor type is responsible for + performing a certain document + understanding task on a certain type of + document. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a document_processor_service.GetProcessorTypeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, document_processor_service.GetProcessorTypeRequest): + request = document_processor_service.GetProcessorTypeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_processor_type] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def list_processors( self, request: Optional[ diff --git a/google/cloud/documentai_v1beta3/services/document_processor_service/transports/base.py b/google/cloud/documentai_v1beta3/services/document_processor_service/transports/base.py index ed4c7110..1e9f1f7a 100644 --- a/google/cloud/documentai_v1beta3/services/document_processor_service/transports/base.py +++ b/google/cloud/documentai_v1beta3/services/document_processor_service/transports/base.py @@ -30,6 +30,7 @@ from google.cloud.documentai_v1beta3.types import document_processor_service, evaluation from google.cloud.documentai_v1beta3.types import processor from google.cloud.documentai_v1beta3.types import processor as gcd_processor +from google.cloud.documentai_v1beta3.types import processor_type DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=package_version.__version__ @@ -166,6 +167,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.get_processor_type: gapic_v1.method.wrap_method( + self.get_processor_type, + default_timeout=None, + client_info=client_info, + ), self.list_processors: gapic_v1.method.wrap_method( self.list_processors, default_timeout=None, @@ -322,6 +328,15 @@ def list_processor_types( ]: raise NotImplementedError() + @property + def get_processor_type( + self, + ) -> Callable[ + [document_processor_service.GetProcessorTypeRequest], + Union[processor_type.ProcessorType, Awaitable[processor_type.ProcessorType]], + ]: + raise NotImplementedError() + @property def list_processors( self, diff --git a/google/cloud/documentai_v1beta3/services/document_processor_service/transports/grpc.py b/google/cloud/documentai_v1beta3/services/document_processor_service/transports/grpc.py index cc21ecc8..47c8a1b1 100644 --- a/google/cloud/documentai_v1beta3/services/document_processor_service/transports/grpc.py +++ b/google/cloud/documentai_v1beta3/services/document_processor_service/transports/grpc.py @@ -27,6 +27,7 @@ from google.cloud.documentai_v1beta3.types import document_processor_service, evaluation from google.cloud.documentai_v1beta3.types import processor from google.cloud.documentai_v1beta3.types import processor as gcd_processor +from google.cloud.documentai_v1beta3.types import processor_type from .base import DEFAULT_CLIENT_INFO, DocumentProcessorServiceTransport @@ -368,6 +369,35 @@ def list_processor_types( ) return self._stubs["list_processor_types"] + @property + def get_processor_type( + self, + ) -> Callable[ + [document_processor_service.GetProcessorTypeRequest], + processor_type.ProcessorType, + ]: + r"""Return a callable for the get processor type method over gRPC. + + Gets a processor type detail. + + Returns: + Callable[[~.GetProcessorTypeRequest], + ~.ProcessorType]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_processor_type" not in self._stubs: + self._stubs["get_processor_type"] = self.grpc_channel.unary_unary( + "/google.cloud.documentai.v1beta3.DocumentProcessorService/GetProcessorType", + request_serializer=document_processor_service.GetProcessorTypeRequest.serialize, + response_deserializer=processor_type.ProcessorType.deserialize, + ) + return self._stubs["get_processor_type"] + @property def list_processors( self, diff --git a/google/cloud/documentai_v1beta3/services/document_processor_service/transports/grpc_asyncio.py b/google/cloud/documentai_v1beta3/services/document_processor_service/transports/grpc_asyncio.py index 04d18b83..b6281f19 100644 --- a/google/cloud/documentai_v1beta3/services/document_processor_service/transports/grpc_asyncio.py +++ b/google/cloud/documentai_v1beta3/services/document_processor_service/transports/grpc_asyncio.py @@ -27,6 +27,7 @@ from google.cloud.documentai_v1beta3.types import document_processor_service, evaluation from google.cloud.documentai_v1beta3.types import processor from google.cloud.documentai_v1beta3.types import processor as gcd_processor +from google.cloud.documentai_v1beta3.types import processor_type from .base import DEFAULT_CLIENT_INFO, DocumentProcessorServiceTransport from .grpc import DocumentProcessorServiceGrpcTransport @@ -374,6 +375,35 @@ def list_processor_types( ) return self._stubs["list_processor_types"] + @property + def get_processor_type( + self, + ) -> Callable[ + [document_processor_service.GetProcessorTypeRequest], + Awaitable[processor_type.ProcessorType], + ]: + r"""Return a callable for the get processor type method over gRPC. + + Gets a processor type detail. + + Returns: + Callable[[~.GetProcessorTypeRequest], + Awaitable[~.ProcessorType]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_processor_type" not in self._stubs: + self._stubs["get_processor_type"] = self.grpc_channel.unary_unary( + "/google.cloud.documentai.v1beta3.DocumentProcessorService/GetProcessorType", + request_serializer=document_processor_service.GetProcessorTypeRequest.serialize, + response_deserializer=processor_type.ProcessorType.deserialize, + ) + return self._stubs["get_processor_type"] + @property def list_processors( self, diff --git a/google/cloud/documentai_v1beta3/types/__init__.py b/google/cloud/documentai_v1beta3/types/__init__.py index 21e68d43..62005726 100644 --- a/google/cloud/documentai_v1beta3/types/__init__.py +++ b/google/cloud/documentai_v1beta3/types/__init__.py @@ -49,6 +49,7 @@ FetchProcessorTypesResponse, GetEvaluationRequest, GetProcessorRequest, + GetProcessorTypeRequest, GetProcessorVersionRequest, HumanReviewStatus, ListEvaluationsRequest, @@ -116,6 +117,7 @@ "FetchProcessorTypesResponse", "GetEvaluationRequest", "GetProcessorRequest", + "GetProcessorTypeRequest", "GetProcessorVersionRequest", "HumanReviewStatus", "ListEvaluationsRequest", diff --git a/google/cloud/documentai_v1beta3/types/document_processor_service.py b/google/cloud/documentai_v1beta3/types/document_processor_service.py index 32252d98..61d83f21 100644 --- a/google/cloud/documentai_v1beta3/types/document_processor_service.py +++ b/google/cloud/documentai_v1beta3/types/document_processor_service.py @@ -44,6 +44,7 @@ "ListProcessorTypesResponse", "ListProcessorsRequest", "ListProcessorsResponse", + "GetProcessorTypeRequest", "GetProcessorRequest", "GetProcessorVersionRequest", "ListProcessorVersionsRequest", @@ -625,6 +626,20 @@ def raw_page(self): ) +class GetProcessorTypeRequest(proto.Message): + r"""Request message for get processor. + + Attributes: + name (str): + Required. The processor type resource name. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + class GetProcessorRequest(proto.Message): r"""Request message for get processor. diff --git a/samples/generated_samples/documentai_v1beta3_generated_document_processor_service_get_processor_type_async.py b/samples/generated_samples/documentai_v1beta3_generated_document_processor_service_get_processor_type_async.py new file mode 100644 index 00000000..6f276a69 --- /dev/null +++ b/samples/generated_samples/documentai_v1beta3_generated_document_processor_service_get_processor_type_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetProcessorType +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-documentai + + +# [START documentai_v1beta3_generated_DocumentProcessorService_GetProcessorType_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import documentai_v1beta3 + + +async def sample_get_processor_type(): + # Create a client + client = documentai_v1beta3.DocumentProcessorServiceAsyncClient() + + # Initialize request argument(s) + request = documentai_v1beta3.GetProcessorTypeRequest( + name="name_value", + ) + + # Make the request + response = await client.get_processor_type(request=request) + + # Handle the response + print(response) + +# [END documentai_v1beta3_generated_DocumentProcessorService_GetProcessorType_async] diff --git a/samples/generated_samples/documentai_v1beta3_generated_document_processor_service_get_processor_type_sync.py b/samples/generated_samples/documentai_v1beta3_generated_document_processor_service_get_processor_type_sync.py new file mode 100644 index 00000000..1db0b26c --- /dev/null +++ b/samples/generated_samples/documentai_v1beta3_generated_document_processor_service_get_processor_type_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetProcessorType +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-documentai + + +# [START documentai_v1beta3_generated_DocumentProcessorService_GetProcessorType_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import documentai_v1beta3 + + +def sample_get_processor_type(): + # Create a client + client = documentai_v1beta3.DocumentProcessorServiceClient() + + # Initialize request argument(s) + request = documentai_v1beta3.GetProcessorTypeRequest( + name="name_value", + ) + + # Make the request + response = client.get_processor_type(request=request) + + # Handle the response + print(response) + +# [END documentai_v1beta3_generated_DocumentProcessorService_GetProcessorType_sync] diff --git a/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1.json b/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1.json index 873363fb..5064960d 100644 --- a/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-documentai", - "version": "2.7.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta2.json b/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta2.json index c56deb29..ef56bd7e 100644 --- a/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta2.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-documentai", - "version": "2.7.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta3.json b/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta3.json index ef9208fb..f02752f1 100644 --- a/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta3.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta3.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-documentai", - "version": "2.7.0" + "version": "0.1.0" }, "snippets": [ { @@ -1613,6 +1613,167 @@ ], "title": "documentai_v1beta3_generated_document_processor_service_get_evaluation_sync.py" }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.documentai_v1beta3.DocumentProcessorServiceAsyncClient", + "shortName": "DocumentProcessorServiceAsyncClient" + }, + "fullName": "google.cloud.documentai_v1beta3.DocumentProcessorServiceAsyncClient.get_processor_type", + "method": { + "fullName": "google.cloud.documentai.v1beta3.DocumentProcessorService.GetProcessorType", + "service": { + "fullName": "google.cloud.documentai.v1beta3.DocumentProcessorService", + "shortName": "DocumentProcessorService" + }, + "shortName": "GetProcessorType" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.documentai_v1beta3.types.GetProcessorTypeRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.documentai_v1beta3.types.ProcessorType", + "shortName": "get_processor_type" + }, + "description": "Sample for GetProcessorType", + "file": "documentai_v1beta3_generated_document_processor_service_get_processor_type_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "documentai_v1beta3_generated_DocumentProcessorService_GetProcessorType_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "documentai_v1beta3_generated_document_processor_service_get_processor_type_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.documentai_v1beta3.DocumentProcessorServiceClient", + "shortName": "DocumentProcessorServiceClient" + }, + "fullName": "google.cloud.documentai_v1beta3.DocumentProcessorServiceClient.get_processor_type", + "method": { + "fullName": "google.cloud.documentai.v1beta3.DocumentProcessorService.GetProcessorType", + "service": { + "fullName": "google.cloud.documentai.v1beta3.DocumentProcessorService", + "shortName": "DocumentProcessorService" + }, + "shortName": "GetProcessorType" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.documentai_v1beta3.types.GetProcessorTypeRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.documentai_v1beta3.types.ProcessorType", + "shortName": "get_processor_type" + }, + "description": "Sample for GetProcessorType", + "file": "documentai_v1beta3_generated_document_processor_service_get_processor_type_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "documentai_v1beta3_generated_DocumentProcessorService_GetProcessorType_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "documentai_v1beta3_generated_document_processor_service_get_processor_type_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/scripts/fixup_documentai_v1beta3_keywords.py b/scripts/fixup_documentai_v1beta3_keywords.py index 0cab2650..75ec155f 100644 --- a/scripts/fixup_documentai_v1beta3_keywords.py +++ b/scripts/fixup_documentai_v1beta3_keywords.py @@ -50,6 +50,7 @@ class documentaiCallTransformer(cst.CSTTransformer): 'fetch_processor_types': ('parent', ), 'get_evaluation': ('name', ), 'get_processor': ('name', ), + 'get_processor_type': ('name', ), 'get_processor_version': ('name', ), 'list_evaluations': ('parent', 'page_size', 'page_token', ), 'list_processors': ('parent', 'page_size', 'page_token', ), diff --git a/tests/unit/gapic/documentai_v1beta3/test_document_processor_service.py b/tests/unit/gapic/documentai_v1beta3/test_document_processor_service.py index 9d4c63ce..be4950f3 100644 --- a/tests/unit/gapic/documentai_v1beta3/test_document_processor_service.py +++ b/tests/unit/gapic/documentai_v1beta3/test_document_processor_service.py @@ -24,6 +24,7 @@ import math +from google.api import launch_stage_pb2 # type: ignore from google.api_core import ( future, gapic_v1, @@ -1902,6 +1903,273 @@ async def test_list_processor_types_async_pages(): assert page_.raw_page.next_page_token == token +@pytest.mark.parametrize( + "request_type", + [ + document_processor_service.GetProcessorTypeRequest, + dict, + ], +) +def test_get_processor_type(request_type, transport: str = "grpc"): + client = DocumentProcessorServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_processor_type), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = processor_type.ProcessorType( + name="name_value", + type_="type__value", + category="category_value", + allow_creation=True, + launch_stage=launch_stage_pb2.LaunchStage.UNIMPLEMENTED, + sample_document_uris=["sample_document_uris_value"], + ) + response = client.get_processor_type(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == document_processor_service.GetProcessorTypeRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, processor_type.ProcessorType) + assert response.name == "name_value" + assert response.type_ == "type__value" + assert response.category == "category_value" + assert response.allow_creation is True + assert response.launch_stage == launch_stage_pb2.LaunchStage.UNIMPLEMENTED + assert response.sample_document_uris == ["sample_document_uris_value"] + + +def test_get_processor_type_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DocumentProcessorServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_processor_type), "__call__" + ) as call: + client.get_processor_type() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == document_processor_service.GetProcessorTypeRequest() + + +@pytest.mark.asyncio +async def test_get_processor_type_async( + transport: str = "grpc_asyncio", + request_type=document_processor_service.GetProcessorTypeRequest, +): + client = DocumentProcessorServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_processor_type), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + processor_type.ProcessorType( + name="name_value", + type_="type__value", + category="category_value", + allow_creation=True, + launch_stage=launch_stage_pb2.LaunchStage.UNIMPLEMENTED, + sample_document_uris=["sample_document_uris_value"], + ) + ) + response = await client.get_processor_type(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == document_processor_service.GetProcessorTypeRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, processor_type.ProcessorType) + assert response.name == "name_value" + assert response.type_ == "type__value" + assert response.category == "category_value" + assert response.allow_creation is True + assert response.launch_stage == launch_stage_pb2.LaunchStage.UNIMPLEMENTED + assert response.sample_document_uris == ["sample_document_uris_value"] + + +@pytest.mark.asyncio +async def test_get_processor_type_async_from_dict(): + await test_get_processor_type_async(request_type=dict) + + +def test_get_processor_type_field_headers(): + client = DocumentProcessorServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = document_processor_service.GetProcessorTypeRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_processor_type), "__call__" + ) as call: + call.return_value = processor_type.ProcessorType() + client.get_processor_type(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_processor_type_field_headers_async(): + client = DocumentProcessorServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = document_processor_service.GetProcessorTypeRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_processor_type), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + processor_type.ProcessorType() + ) + await client.get_processor_type(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_get_processor_type_flattened(): + client = DocumentProcessorServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_processor_type), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = processor_type.ProcessorType() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_processor_type( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_get_processor_type_flattened_error(): + client = DocumentProcessorServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_processor_type( + document_processor_service.GetProcessorTypeRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_get_processor_type_flattened_async(): + client = DocumentProcessorServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_processor_type), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = processor_type.ProcessorType() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + processor_type.ProcessorType() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_processor_type( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_get_processor_type_flattened_error_async(): + client = DocumentProcessorServiceAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_processor_type( + document_processor_service.GetProcessorTypeRequest(), + name="name_value", + ) + + @pytest.mark.parametrize( "request_type", [ @@ -6480,6 +6748,7 @@ def test_document_processor_service_base_transport(): "batch_process_documents", "fetch_processor_types", "list_processor_types", + "get_processor_type", "list_processors", "get_processor", "train_processor_version",