From 484c8db151690a4ae7b6b0ae38db0a8ede88df69 Mon Sep 17 00:00:00 2001 From: Carl Lundin <108372512+clundin25@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:50:37 -0700 Subject: [PATCH 01/12] feat: IAM signblob retries (#1600) Add exponential backoff w/ jitter retries to IAM signBlob calls. --- google/auth/iam.py | 29 ++++++++++++++++++------ google/auth/impersonated_credentials.py | 25 ++++++++++++-------- system_tests/secrets.tar.enc | Bin 10324 -> 10324 bytes tests/test_iam.py | 13 +++++++++++ tests/test_impersonated_credentials.py | 18 ++++++++++++++- 5 files changed, 67 insertions(+), 18 deletions(-) diff --git a/google/auth/iam.py b/google/auth/iam.py index bba1624c1..1c2eb913b 100644 --- a/google/auth/iam.py +++ b/google/auth/iam.py @@ -23,10 +23,18 @@ import http.client as http_client import json +from google.auth import _exponential_backoff from google.auth import _helpers from google.auth import crypt from google.auth import exceptions +IAM_RETRY_CODES = { + http_client.INTERNAL_SERVER_ERROR, + http_client.BAD_GATEWAY, + http_client.SERVICE_UNAVAILABLE, + http_client.GATEWAY_TIMEOUT, +} + _IAM_SCOPE = ["https://www.googleapis.com/auth/iam"] @@ -88,15 +96,22 @@ def _make_signing_request(self, message): {"payload": base64.b64encode(message).decode("utf-8")} ).encode("utf-8") - self._credentials.before_request(self._request, method, url, headers) - response = self._request(url=url, method=method, body=body, headers=headers) + retries = _exponential_backoff.ExponentialBackoff() + for _ in retries: + self._credentials.before_request(self._request, method, url, headers) + + response = self._request(url=url, method=method, body=body, headers=headers) + + if response.status in IAM_RETRY_CODES: + continue - if response.status != http_client.OK: - raise exceptions.TransportError( - "Error calling the IAM signBlob API: {}".format(response.data) - ) + if response.status != http_client.OK: + raise exceptions.TransportError( + "Error calling the IAM signBlob API: {}".format(response.data) + ) - return json.loads(response.data.decode("utf-8")) + return json.loads(response.data.decode("utf-8")) + raise exceptions.TransportError("exhausted signBlob endpoint retries") @property def key_id(self): diff --git a/google/auth/impersonated_credentials.py b/google/auth/impersonated_credentials.py index c42a93643..afac4120b 100644 --- a/google/auth/impersonated_credentials.py +++ b/google/auth/impersonated_credentials.py @@ -31,6 +31,7 @@ import http.client as http_client import json +from google.auth import _exponential_backoff from google.auth import _helpers from google.auth import credentials from google.auth import exceptions @@ -288,18 +289,22 @@ def sign_bytes(self, message): authed_session = AuthorizedSession(self._source_credentials) try: - response = authed_session.post( - url=iam_sign_endpoint, headers=headers, json=body - ) + retries = _exponential_backoff.ExponentialBackoff() + for _ in retries: + response = authed_session.post( + url=iam_sign_endpoint, headers=headers, json=body + ) + if response.status_code in iam.IAM_RETRY_CODES: + continue + if response.status_code != http_client.OK: + raise exceptions.TransportError( + "Error calling sign_bytes: {}".format(response.json()) + ) + + return base64.b64decode(response.json()["signedBlob"]) finally: authed_session.close() - - if response.status_code != http_client.OK: - raise exceptions.TransportError( - "Error calling sign_bytes: {}".format(response.json()) - ) - - return base64.b64decode(response.json()["signedBlob"]) + raise exceptions.TransportError("exhausted signBlob endpoint retries") @property def signer_email(self): diff --git a/system_tests/secrets.tar.enc b/system_tests/secrets.tar.enc index ebddbfe057d8bd05308ce2e6c3eb38013851901e..4a6a25883c48ae15a2b07b3dc239fc812835aa75 100644 GIT binary patch literal 10324 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 literal 10324 zcmV-aD67{BB>?tKRTK7Bd=3*_WNnd)uM+`bb(Uc?N&-t?`KFI!QEj&&F4HIyx`bv6oeQc8mmor_eA={&K!Ivcmu;|}p zf3D%pnrj&O#_6+s<32A(yG@Wj6Jkx=8e&?~V#M4YA9lCo5g8e92tr`1P!oCNE7*LS zd@;V_5`oljZ}Ah0Q`f-tkXPu+c#|qHa6!Y;r3*gDi7yn{Y+p2B*A-?5x%k2-6B^{` zoezT>cc%v;3)DxYaZu|(pzXxYR4trR>+9&6P~Wd^J%Gwb4J-n5*b*WKehF@4&u!U~ zrrI|#Y|h42FO4gZv3xTD_6``oYMoP#LE4?R0xKA#(5-zx#7mbV+~`r1KZ;%&w7xU6 zaq(-jVuL=$7sRt@D9YFv$Kr(oy!SD^6XGl-kMc`i1Dgq2E$zuZ60P!_!=+TNn z+yK2}gqDYlX6?U+;mY%H1_0+Y3Fh{KC5$%>+Drur$Em5TZ@H8XjxyI>!LBlhjFT3KRx;?R)Qe7Yc6VkFtK7HNmUD zQ(yX|l?8W;I@aWb=5kL6I2`YQk}ImPEBu|lPM0~I6uGGCK}y)Y=xQeR6BzcjLEEa> z+T4jw*>~t1Tcq$;AIfFH^@mv$>EW5>1o{YLcn1=h!ulP2%>;BA@m2n8h;ex1a7kW+^Et_Su5!C z*@!A1Ktqe#4BcEcg!%$W5AAT}V380pF=!f)t|LP*rUDB8CyOtEsW^bXIj@~ve5zwy zE;K)w*|3K9=DsKZ+A1OCy$qAdLafv--qF}f?&o8)31319-C-`1a+l&cx4-bef@3(` z6qs&lQdH_wQR{_4cpPcJRZ+GHVy!hn1Bt4`cIu3+T2x{WARJ{(b7E&+P&fwzgkDgM zPwyN%UvO%g8|<0wOBJQ0bszHl`Zl_;mU3qVOHr4`Mtqo3K6%bQOgo zuUkxSxCXBO0h)*v>Z#cM{<2q9SDX-c-2UJ)WN;apWt4JtX*+!6z%zRgG8xn80M(cF zE`SdK9>+NL5Ms1{39*{U82}vsK*PttB7!zr%nc#%a1M1KEaLrVW*|a>~Aq2&T*D2E8z# zI;8Y&863Sv`vmI6BUry8p{nCFQ=z%sL=KjP+8RZ)5ofY|q5>^3q8;NnSI1=k5}T@-n;W2d^WL!i#KUK-U!gzK7>; zbm}rEIt7|e1p20T%e)K`;S2k`fS?$yB#=F=-cW~wQ5PYV)VAJXJ<82^?N0+8+u2>C z(VpoHg02c@ECYyBZ^ZOgG@l{2@kvjAJgM7;K$U7cqUZbw-SHVvim!*1s-Y6s%fvYaf%ig=AxNwqL~Mnx=U$|=%Lnb__fBil4Vxc&@A z`JeJ815bk@wP+Yb$=^aZWY!9hI^F33Fs5GEzd4)V_LkSvwlD8b=V68TC*J6Pd$k%p zk-j`_7tn25!M(A`%Yzff3&eZ{Q_3NryeEe)V+Vdw1F`B+)B^67Bi32 zfeP+YJ(&uMcxgAu#J(72V?6it6Znm7zzB-Js)bn)JTs*! zy2m({>2Ncs@^qiH95-n`d6?&E4tG_To2?xBu|$ZYg01LF8iAo>* zs9M<5)l)%%ETHGM^diDPWh z_oU8S8V4C$sPgtskPSnW4H7<#=dUF7X?O>ri17Tn2Yac+YWnoy>r22O$d6#Fdw=W% zW7#nY$eNP7P+u66KBBoA26Sti^u)V;N;wY|=q~gsRb)lvLpBB&ckAwC2n;@$g;MCJ z+?PoExOaU!TD2Z?9dq|L&jGOEDwIRJUMFiZfN1r=W7Y&9(^fB^ixlV%fsTuAGY6?v z76`5I-Mbv|fOpr^`CLjuJ_DEg4q|OFt|zwN8CFd=^$y&<`H{Q+s*h>1s~@pF1y;i7 z=)l^=1j~kWs1)!kZW4LNaOV#$8hd!}HY<`?cwkUTBm13K(vM?@yGCt(3L7e3&cZ$U&vDJ7=phc7nl(UL} ztX3HT&yVb?4Ztv#t<-1cgc?_)gNMw9+LnKy5JvvBP@(!hAH*~Xn7dT7%+EKGddvIF z@Yo~sUhSZddfcshg7W`*?S z4cVWZ?RhIEduCy$~`n0o>=4|Tr^9B#$@C*!F??P+St3di5wdk}=TDxJg$LR=< z6hXut8h&$lm-NbeIqG$$G6$6BUqT8u9^(tCVqqSA%_e7ose1#|#yjrsfrWW*zTF%c zKA7Z3i$Au3%iUiEqOcmS2$qOE8rTZF?A5DR&x05G2ES#Y+>?hT<9kj35o(p z!A+x?m;42X;hJ%p*D!kcFio@zIzraLq78~F%>xaU8#8zg45&*%YF^IcrqTjF@TmRh z7SyS##x}+y7sO^#vS2X0oleGot=+_vbG6_`n1J-Pnr_mFw@Zo~sGqDI#E#b58VC6@ zjshe+AR1hF?x@q%*HM#kWYQAJp4v+Cpyr0v&+fW%cad53cjQwnm)5D1VnzOuN-1xc z*YhT8BLP%r?}dKT2=TPsi_G0&`o+h8gl*B5X1rtUb6HHe%?o5!Gc69J7L#3AGEd_n z!gTK`l3W#aqlI|Bu023QKX;rXNKE6XdmBtF&FGA4yfM#KYE#Ymj-p!W#`EqV< zjO%ZO0km%m3lklj*%S-CA+!M=ZD%*6ZMyCbi1EJnQMh-7OQu)KG?{^O0bbT==?+%8 z2X9NWPod*F#5-mjrP8^^Y+G+K(YGyqz>>8p#0d&-8=dHb%tXM;aR0hMg8Dc(t&o%@ z5vPK|bN$*!)MqyW;(cJy&Vs2B%>0q&H!Ive(i4vSwI8isi9+KRpnP&#>vy1|I6t!R z7we$C*l6Zj*HR(m5I_IWUrc6{_-gA_ECCc@LpFP7%gXu6f1`er!@&!@ZQlnf>OoE0 z$V`o*awhM_>Dd>&?H1#}7<{BlS}a3H`+E%b@b6b3!ar!B5uZv?gA=RXlr4QhF=}5 z-12AKsfVh#I-ECQSw{@M4?m!fW5@cbs`BSSWGY8yYHu4KF!&nw{{db5YGcQIdL~++ zcOH^D>6EgaYH=~YD$nCN-ry~p0oA(&&>AxxMNTcvXHsEg^!T_+jkPEVA}={XeO>zY z*erK*hoAoTmuQ+eQcbNHx^e#5x^SeTVeA;p*!(20V6#wdv+4`5_s8@9;JPe6jNMPY z`#ZkpiPXrLEU%5wBorkq)4VM-k=kDLGCMbP5!;Cx$wzUeBd{Hp!Ta{8!5Q~Px?~k_ zfSx1igq4Ik7pqY3sq8?vwC_vYzM>#SN1=(?+UsBYY|Ui*~m}@lsFi1!S9~SNq%c|>_UFX)}lkOeJG+^Y4HW;}j#Y*LS z-@Dk3JV2UC&0_ug)_B_8>b4SgnCuV0?z03=ur=yL>Tcn;`gcuY!G@+0R^tJB%94ZsFHe!{)t5ek& z@7eZbhKHNe$7eSX%a|=F2bb(T#JmMCNO`|9$3yVrdzs0<9Z5j9CeP8YssZ0UI*{cg zArsqKCk_0-_r)mWj(&%>36*o6MUST*<-}&PHnL%X#DS8*o4-nU1UNU*-_|KV8 zpGbatiTP6tV+J6*;=`JcSr$q=?d|y~*h%FYz5;T>fQh+9a5IS3`!*#-mH-PAFh~l~ z!5sPBL;-$rM;ziD+TxF|;>!BSnDAI((H=t1g=R*X+WT6U#k|VGoVlAuRDY;nzj}_e zM_7AQlLek`V<%NvDnPV`blC@~d+eTD+_4=-cklR3)>w^M#M(y_9bNzaVUqnQZ>2nmM2;Rl56%&$^x6*+uw8uIyV(G>86siK8$h-Eg_ ze+!N?!PCYO63^$w5Ch8YEStsLauZ6wU9UAGb4U83bZ~{vuxte>NK?6ft`*9l`|^4L zJJ!+*x=vX~flepmkj;GryoGgy-zqM5*aZy5aSIxXpy>tC{VCA-gED)=0HO4Y(Pa0) z^mCb0l0dHrCg-y=SG64YjC-!zf}2itgLxTzrlsZzvtC9K2&w}c@_%ghmda8$3j%zR zC4cB~=B-KIU!b+6yXMu`S^nmXL(CUJk{^=0b!jkO82c!_7lFU#!MeCZcbzn4wC@i= zGv1OoRJ-zCX9{)p$1O+wiwJ-$5astTtEB3gzCm_35PUbU)|F5$Fl<;3PwkNgI;_Ng zp$tGDV6j$+O@f2GksC2HbV1TkUOvQtwxCzflUy9xjF1-DY)fwg4wZ6X?pz2|1l=cV;J0Z%qlnhNn_oE?b@+EZ#VY+;UNH47)e5d#rCt@ z4j+(s`XmWIUoB|EG5a)wd|4i9!)2R%MG6N=TX^P^)2BG`9WkJQ>+=@`-3RIuInH}9 zigXV+LV9EOgR*pgvVQ+H!{MITJ|^cd&isnz>^RNc~RH2j0BNdO8l? z46g-QjqT>0*%xK+Jn0+aMG>)kkLH*7yiiYWnQCI4!A~q}hDj3^eL@RI>iFRy`~vy2 z%o!cJ>fqS6C}x~v>&1}iAPJs>pkL`1Jb`xtY*6C%Q&+ZQ?TkG1Evbyyp58)N^wM*$ z5dL5K5nC&|_}qJIKr%P>^BFi*?v%kzyB=ySTOT^{QsPi1E7=D*k}3+C2=c>(OT4Nn z@a7>J%)9Jt1Z5=Ur@oRBuwfaHj+}1GZbq&w)*+_;Udx(*M{1J;Qtn03U}A-^KGDK* zf_@9oi#v=0Gsjo~UrxNCgakk=A69w6(A%?l6 zrq+Gp8;G8S!pclTxeJmTEy(WX?*=y*wNTm(k{T1&hXTQKK*XGAYea$|>*%>EAPSO8 z|PyGqvh=dG!7$7Veu$;GDs277Y z7OdFq8Z`>ebII)d_6a2|%Lstcx^Sv8Q2zH1pAQJcLOV@8pQz{VabQywUByPr9M4m; zM#S>y&nzYTN$kBURh7*J_FEZGW^*m<#hZ!332MCyK0@M#Umav{=Mi=kTvz<6BJ%EP zsCrwb5g-XJPjAtw?LU@@EsMf%D6E<@6$22UHN6}x2uhG11M1y^y6n`ooE6|De(ddDw*mvU>Op?yqmiKn>#>Pcz7$H-AA}~b6p9{^%>aZ~Uf>~m}67vod zWo@OAGR?gSP(auiK!co$t88=6U>x}sN8dvn(y>!3<72PTQu3srWTz0HuF5pYso(Wr ztmbY$6uso_s-qjr(N>~9%naVrC&SL{gUzg;Q89qVj?D`3RMYH4nbvO zw$kj^Ae8bq$be1j`TFj%^PoV6RB7Q_h)Hr`hh9-h8WAFc09=5`kyaO2*Rw1i(gOb10G0-8M8~P>+qt!?R)=_KD60V=L2+e`@s6>Z5434B%660lb z!tnHWe-dzJE=644WItabbNN)8Qg)HiSF~>3;ouqBLapP-k z9#yzDD@kriPn3US531WTHyC{Xl!Mut1>^DHQBy~UhH9q z!?%9UJs0>I=9{bOZlw`n%R9ETD2ySAhJ)wO)t5Aen`;r%F)R4zo-0J67fj~P6YRH( z)o6qm;XhZDjXLPr0y zVu)<>2F%O3W1M65++zJq%*KhbIjl@{aj=$k&Cm0wvwbdIoHP8%)Rbu-?c1h zKi`wd2vGtWefTab8$4$)F$N2~ec1yYW&5`kuVG~CYAJx>O6ZfAZb0QJ4fE804XIl+ zkPc>-T&`R7#YbHNM|RkqSlfEGO~U!qp1GUdFG1>e}3k8 zU8~;@n2ZXHcq3Yk=b$0;62nmylvH^FbgtE};!o3mk>ywzy1C5wAmYT!8xr#WAuX>H zj?_Fj3!XAn6+wy+QbTfqwz7_8*jRNJo)((I(VQ(k{3tl(8~!YqrFw=Hf(!5PTftmvjQE_Q3g#FExAmjsj5 zx#1qft9;$QTuM8Bb0i!8u+Q4+zg*XU|d0h{66Hu1sK0t^{@^P1098v2`(I?b=0{O@D zc>}2=&8S&(vqoycZN7m8A2n3O`*o5^AVXGT%|6{sIm!nE$=C!?pF#v=o-^Ki9z6|$ znXJJ?x!zApJ`bNkdr*E4I(ql|T{F4VHaT<7rN~PeTXN8)QJ z#@OQ3qEPHDiTay)M9)$guf!G2#6|)2e{!`BS55~Zw`_a3i+S<-S+I){k>6uL&}Omq zyeO))Z`!JE?%WrLgf2sWPWSJMjOjN8zy{w|svg6KLca>-Stn$^mED4lZ8Lb!Q&2cX z%KpUZH3?Lh2Wsn=B=_}kPfj7Kn5a0C!Uk}jrt5E2aHy(Gl0bdHHW5Y}Qv+&74GRC~ z(IG{P0<{CIWK;zC`9JUNb@c%BS<5msgj z&XHU}G9`)F`FJ$@1q2d{sot$3L{AqK;PFkXT2UTmib=VhFt2yi8y&=|)G52VH0gl3 zDf0@9m34;3RMNStLzl}3{8ii*992|U{6o%;!J32nur`txEJmce;l~>wv5uNx(^4s# z+svzH?iiq|ezMq{fpJL<^YQ0&mf7-+1w)T(Q!KdDaS=&XtdO{PUUB|fGuN-bQb25G zDK_VJece#6$^K#RQY+!gG=18O)DqUmyI&(UlYYh2(K;f)iS^FKgK|GNHJF7~uGAU1 z_+=I6???2NRdt`#?^z_OFB(z(lZuA-W*gZCEiKvRPh}@w-}<2Gjjt_2G)Gt*^8YUD(@>!a^gwn`%nPFeUEM`oU_3JHh6&3YK5!4yRAVE zk&Pvv?{|}&_E9+bn4Dy!im`_RF{b(`4g{6Jv+Oow#+hX&&Qya?9jTenlp^S)O<3#7 z_v-2Tp|CCMfFrwJR@Vp06OJXRG1+)R|PUb})8PNr^ zk__n9kW+jqvHQ1QdzDU*0-8~gB5<=zZFFhdTl~O3*UW=ZqC(+g>snI0?Q6FA*^0&V zQx(*Wp)v%u^Zu}Fsm^>l-U(t72j%5CH;3f*v7WxI6#!XC%<^0?xSA9OvewDu^d-Q)@qCdBR_5d3aM zENbbE3bI-s7awoy)cv;?MeoC}>>gjv=JAQ587SqZIC29k?Ca5)B9+zRWsXKTZbQ@G zL$M6h^k4LyK`2He1XCM8qY~^{+)u6atwxdiMZ%(B9pNiX1=~V&EhF$H!q*QYBI5ifb zHkkiCp4>WD*X$QY@)?B3JYIFAg_@QPnk6qRDok=OK&zvSo*C6v(fhvPM8*TNI4grG zcc*t`^!U*pjMe4%X$d5{;uL|66+zi6$G#HraGZ&x5T94P|6*z0Y0}kM?g+?&Y3yB> zkvR`azu6PoeD^H-7w|3HkAy%pYtq??#1rl~^j>Nc`P z=QSS*y?Ejvy@7pnIu3uChQv(>s!TKyb(mFVcEyQ2f)|N;+ZgeP@xlmwO^yH%*{bJuv#)}Y%Ys|kSLjm)JL3bX8fg7Rdq-Hrsx zwaExd0zkk@j?Z7cbosTZ2HFzhZ7T4N_H{1%(l)(_r9xY#RX zo8OI^%2cQw4$e3A5z@LTQ1%M91d~ByD$3f+n!DS_?K%{jTJE_OZh1=;lsoIs0m7iWDVTe5ER+W%zHFb` zacdAPm-y6@y+_>Y}a8%_ssHxRWa;|v+5Ho>P<>e3-kz} zi3B@WcIP*~+3Zw=E8*!*Gh-fGLNSVqp04ZusgcvHZ3-^KxH2Skue;>zeE`3;I`6?6 zhm^cX99$D{$`(`gNqTrN-k1atSLU?~@?P-?N91VI_jmgD>71@|Ty#f%=R%wh+OnzR zG}FSnbr|%&49kk&Bx2;G6uSRHqO}$yC-UYf)^_^*B)x~3zkj=FDy%zwhHU0Z(Nj=T z^a@UbX&=JDf6h80xwN1MG&*|KFcd4yGbflldnc)Uo19pc#i=~N-r@s3`?Lny1fqmv z|EQK<3W17@d5A&7m1e?R4S#@C8=c2tR#^aE0tNuAWR-THftmH z`j}9>V`*e0Xl?pqd=Zff)A^1biEJmDWJsc)V)L&Bwu&QPRS^@3X`Fmw34k2 zrpkG8pqv-!1w$btiKMk6cM9cByF>V{-+3|&t*xF}64vUCzy2p-(1|A})ce$z6YS5N zADh!5uLWoYyQ&VDmWsj5wLnUs>?9-jX7b)|u_eKfvjb7rSp;_jcOrR&>lUC{^0ncI z>3ZB4;ddG!wx#=I-6B4%EnU&3;8#*|&A_u5E{`x6{<$Z?B!<6En!l@x$SwY$tgQj| z!Iol*LBA`;9vCfKqUty-7n!N(XcrPU8`}gnI|5Xc32HuadJB+%E>=7%+5w})*p5Dz zzg@dRW&BMmrLjYilpDxh=a6Xv97OJ*JCz%rcYA*;NEo*K+i>6z>8&Dkrp(S$LDRo`pa5OTSe3JKF2}KGh>6MIr*Uo{sD>TjI;#B zBBQbCnZ#(LKq|DhEXpxG6as}F<_)l>Y*W6?q6z2vsapSw{A4(sXI+;Hf`O>9iqM*H zR1t&^0zewe9O*{j?6 zdq-=*jDA$nAmu_`_gPBEs2Np Date: Thu, 17 Oct 2024 17:34:10 +0000 Subject: [PATCH 02/12] feat: Support External Account Authorized User as a Source Credential for impersonated credentials in ADC (#1608) * feat: Support External Account Authorized User as a Source Credential for impersonated credentials in ADC * formatting --- google/auth/_default.py | 4 ++++ system_tests/secrets.tar.enc | Bin 10324 -> 10324 bytes ...ternal_account_authorized_user_source.json | 16 ++++++++++++++++ tests/test__default.py | 16 ++++++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 tests/data/impersonated_service_account_external_account_authorized_user_source.json diff --git a/google/auth/_default.py b/google/auth/_default.py index 7bbcf8591..cdc8b7a64 100644 --- a/google/auth/_default.py +++ b/google/auth/_default.py @@ -472,6 +472,10 @@ def _get_impersonated_service_account_credentials(filename, info, scopes): source_credentials, _ = _get_service_account_credentials( filename, source_credentials_info ) + elif source_credentials_type == _EXTERNAL_ACCOUNT_AUTHORIZED_USER_TYPE: + source_credentials, _ = _get_external_account_authorized_user_credentials( + filename, source_credentials_info + ) else: raise exceptions.InvalidType( "source credential of type {} is not supported.".format( diff --git a/system_tests/secrets.tar.enc b/system_tests/secrets.tar.enc index 4a6a25883c48ae15a2b07b3dc239fc812835aa75..b2fb69b4adb68560ddbc8cc0f1bc33aaa51068c7 100644 GIT binary patch literal 10324 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 literal 10324 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 diff --git a/tests/data/impersonated_service_account_external_account_authorized_user_source.json b/tests/data/impersonated_service_account_external_account_authorized_user_source.json new file mode 100644 index 000000000..0bc44c13a --- /dev/null +++ b/tests/data/impersonated_service_account_external_account_authorized_user_source.json @@ -0,0 +1,16 @@ +{ + "delegates": [ + "service-account-delegate@example.com" + ], + "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/service-account-target@example.com:generateAccessToken", + "source_credentials": { + "type": "external_account_authorized_user", + "audience": "//iam.googleapis.com/locations/global/workforcePools/$WORKFORCE_POOL_ID/providers/$PROVIDER_ID", + "refresh_token": "refreshToken", + "token_url": "https://sts.googleapis.com/v1/oauth/token", + "token_info_url": "https://sts.googleapis.com/v1/instrospect", + "client_id": "clientId", + "client_secret": "clientSecret" + }, + "type": "impersonated_service_account" +} \ No newline at end of file diff --git a/tests/test__default.py b/tests/test__default.py index d17c747af..e42b4dd94 100644 --- a/tests/test__default.py +++ b/tests/test__default.py @@ -153,6 +153,11 @@ DATA_DIR, "impersonated_service_account_service_account_source.json" ) +IMPERSONATED_SERVICE_ACCOUNT_EXTERNAL_ACCOUNT_AUTHORIZED_USER_SOURCE_FILE = os.path.join( + DATA_DIR, + "impersonated_service_account_external_account_authorized_user_source.json", +) + EXTERNAL_ACCOUNT_AUTHORIZED_USER_FILE = os.path.join( DATA_DIR, "external_account_authorized_user.json" ) @@ -365,6 +370,17 @@ def test_load_credentials_from_file_impersonated_with_service_account_source(): assert not credentials._quota_project_id +def test_load_credentials_from_file_impersonated_with_external_account_authorized_user_source(): + credentials, _ = _default.load_credentials_from_file( + IMPERSONATED_SERVICE_ACCOUNT_EXTERNAL_ACCOUNT_AUTHORIZED_USER_SOURCE_FILE + ) + assert isinstance(credentials, impersonated_credentials.Credentials) + assert isinstance( + credentials._source_credentials, external_account_authorized_user.Credentials + ) + assert not credentials._quota_project_id + + def test_load_credentials_from_file_impersonated_passing_quota_project(): credentials, _ = _default.load_credentials_from_file( IMPERSONATED_SERVICE_ACCOUNT_SERVICE_ACCOUNT_SOURCE_FILE, From f070de06492a5eed3fab54313272acb5f603193a Mon Sep 17 00:00:00 2001 From: sai-sunder-s <4540365+sai-sunder-s@users.noreply.github.com> Date: Fri, 18 Oct 2024 20:40:56 +0000 Subject: [PATCH 03/12] fix: update secret (#1611) --- system_tests/secrets.tar.enc | Bin 10324 -> 10324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/system_tests/secrets.tar.enc b/system_tests/secrets.tar.enc index b2fb69b4adb68560ddbc8cc0f1bc33aaa51068c7..a13879adc306e55886c219a6e4ffe55218b1dc06 100644 GIT binary patch literal 10324 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 literal 10324 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 From 16c728d30adb36e19aabe34f0ed5a95152d9a135 Mon Sep 17 00:00:00 2001 From: Timur Sadykov Date: Sat, 19 Oct 2024 00:28:47 -0700 Subject: [PATCH 04/12] feat: making iam endpoint universe-aware (#1604) * feat: making iam endpoint universe-aware * feat: make sign and idtoken endpooints universe aware * add universe_domain parameter for the iam request * fix: test updates --------- Co-authored-by: Owl Bot --- google/auth/iam.py | 13 ++- google/auth/impersonated_credentials.py | 16 ++- google/oauth2/_client.py | 9 +- google/oauth2/service_account.py | 1 + tests/compute_engine/test_credentials.py | 20 ++++ tests/oauth2/test__client.py | 2 + tests/oauth2/test_service_account.py | 8 +- tests/test_impersonated_credentials.py | 130 ++++++++++++++++++++++- 8 files changed, 178 insertions(+), 21 deletions(-) diff --git a/google/auth/iam.py b/google/auth/iam.py index 1c2eb913b..bed1930f5 100644 --- a/google/auth/iam.py +++ b/google/auth/iam.py @@ -35,22 +35,19 @@ http_client.GATEWAY_TIMEOUT, } - _IAM_SCOPE = ["https://www.googleapis.com/auth/iam"] _IAM_ENDPOINT = ( - "https://iamcredentials.googleapis.com/v1/projects/-" + "https://iamcredentials.{}/v1/projects/-" + "/serviceAccounts/{}:generateAccessToken" ) _IAM_SIGN_ENDPOINT = ( - "https://iamcredentials.googleapis.com/v1/projects/-" - + "/serviceAccounts/{}:signBlob" + "https://iamcredentials.{}/v1/projects/-" + "/serviceAccounts/{}:signBlob" ) _IAM_IDTOKEN_ENDPOINT = ( - "https://iamcredentials.googleapis.com/v1/" - + "projects/-/serviceAccounts/{}:generateIdToken" + "https://iamcredentials.{}/v1/" + "projects/-/serviceAccounts/{}:generateIdToken" ) @@ -90,7 +87,9 @@ def _make_signing_request(self, message): message = _helpers.to_bytes(message) method = "POST" - url = _IAM_SIGN_ENDPOINT.format(self._service_account_email) + url = _IAM_SIGN_ENDPOINT.format( + self._credentials.universe_domain, self._service_account_email + ) headers = {"Content-Type": "application/json"} body = json.dumps( {"payload": base64.b64encode(message).decode("utf-8")} diff --git a/google/auth/impersonated_credentials.py b/google/auth/impersonated_credentials.py index afac4120b..3173a141f 100644 --- a/google/auth/impersonated_credentials.py +++ b/google/auth/impersonated_credentials.py @@ -46,7 +46,7 @@ def _make_iam_token_request( - request, principal, headers, body, iam_endpoint_override=None + request, principal, headers, body, universe_domain, iam_endpoint_override=None ): """Makes a request to the Google Cloud IAM service for an access token. Args: @@ -67,7 +67,9 @@ def _make_iam_token_request( `iamcredentials.googleapis.com` is not enabled or the `Service Account Token Creator` is not assigned """ - iam_endpoint = iam_endpoint_override or iam._IAM_ENDPOINT.format(principal) + iam_endpoint = iam_endpoint_override or iam._IAM_ENDPOINT.format( + universe_domain, principal + ) body = json.dumps(body).encode("utf-8") @@ -219,6 +221,8 @@ def __init__( and self._source_credentials._always_use_jwt_access ): self._source_credentials._create_self_signed_jwt(None) + + self._universe_domain = source_credentials.universe_domain self._target_principal = target_principal self._target_scopes = target_scopes self._delegates = delegates @@ -271,13 +275,16 @@ def _update_token(self, request): principal=self._target_principal, headers=headers, body=body, + universe_domain=self.universe_domain, iam_endpoint_override=self._iam_endpoint_override, ) def sign_bytes(self, message): from google.auth.transport.requests import AuthorizedSession - iam_sign_endpoint = iam._IAM_SIGN_ENDPOINT.format(self._target_principal) + iam_sign_endpoint = iam._IAM_SIGN_ENDPOINT.format( + self.universe_domain, self._target_principal + ) body = { "payload": base64.b64encode(message).decode("utf-8"), @@ -428,7 +435,8 @@ def refresh(self, request): from google.auth.transport.requests import AuthorizedSession iam_sign_endpoint = iam._IAM_IDTOKEN_ENDPOINT.format( - self._target_credentials.signer_email + self._target_credentials.universe_domain, + self._target_credentials.signer_email, ) body = { diff --git a/google/oauth2/_client.py b/google/oauth2/_client.py index 68e13ddc7..ee5689120 100644 --- a/google/oauth2/_client.py +++ b/google/oauth2/_client.py @@ -319,7 +319,12 @@ def jwt_grant(request, token_uri, assertion, can_retry=True): def call_iam_generate_id_token_endpoint( - request, iam_id_token_endpoint, signer_email, audience, access_token + request, + iam_id_token_endpoint, + signer_email, + audience, + access_token, + universe_domain, ): """Call iam.generateIdToken endpoint to get ID token. @@ -339,7 +344,7 @@ def call_iam_generate_id_token_endpoint( response_data = _token_endpoint_request( request, - iam_id_token_endpoint.format(signer_email), + iam_id_token_endpoint.format(universe_domain, signer_email), body, access_token=access_token, use_json=True, diff --git a/google/oauth2/service_account.py b/google/oauth2/service_account.py index 98dafa3e3..3e84194ac 100644 --- a/google/oauth2/service_account.py +++ b/google/oauth2/service_account.py @@ -812,6 +812,7 @@ def _refresh_with_iam_endpoint(self, request): self.signer_email, self._target_audience, jwt_credentials.token.decode(), + self._universe_domain, ) @_helpers.copy_docstring(credentials.Credentials) diff --git a/tests/compute_engine/test_credentials.py b/tests/compute_engine/test_credentials.py index 662210fa4..13983467f 100644 --- a/tests/compute_engine/test_credentials.py +++ b/tests/compute_engine/test_credentials.py @@ -487,6 +487,16 @@ def test_with_target_audience_integration(self): }, ) + # mock information about universe_domain + responses.add( + responses.GET, + "http://metadata.google.internal/computeMetadata/v1/universe/" + "universe_domain", + status=200, + content_type="application/json", + json={}, + ) + # mock token for credentials responses.add( responses.GET, @@ -659,6 +669,16 @@ def test_with_quota_project_integration(self): }, ) + # stubby response about universe_domain + responses.add( + responses.GET, + "http://metadata.google.internal/computeMetadata/v1/universe/" + "universe_domain", + status=200, + content_type="application/json", + json={}, + ) + # mock sign blob endpoint signature = base64.b64encode(b"some-signature").decode("utf-8") responses.add( diff --git a/tests/oauth2/test__client.py b/tests/oauth2/test__client.py index 9da63cbde..6a085729f 100644 --- a/tests/oauth2/test__client.py +++ b/tests/oauth2/test__client.py @@ -324,6 +324,7 @@ def test_call_iam_generate_id_token_endpoint(): "fake_email", "fake_audience", "fake_access_token", + "googleapis.com", ) assert ( @@ -361,6 +362,7 @@ def test_call_iam_generate_id_token_endpoint_no_id_token(): "fake_email", "fake_audience", "fake_access_token", + "googleapis.com", ) assert excinfo.match("No ID token in response") diff --git a/tests/oauth2/test_service_account.py b/tests/oauth2/test_service_account.py index 2c3fea5b2..45e0d6c91 100644 --- a/tests/oauth2/test_service_account.py +++ b/tests/oauth2/test_service_account.py @@ -789,7 +789,7 @@ def test_refresh_iam_flow(self, call_iam_generate_id_token_endpoint): ) request = mock.Mock() credentials.refresh(request) - req, iam_endpoint, signer_email, target_audience, access_token = call_iam_generate_id_token_endpoint.call_args[ + req, iam_endpoint, signer_email, target_audience, access_token, universe_domain = call_iam_generate_id_token_endpoint.call_args[ 0 ] assert req == request @@ -798,6 +798,7 @@ def test_refresh_iam_flow(self, call_iam_generate_id_token_endpoint): assert target_audience == "https://example.com" decoded_access_token = jwt.decode(access_token, verify=False) assert decoded_access_token["scope"] == "https://www.googleapis.com/auth/iam" + assert universe_domain == "googleapis.com" @mock.patch( "google.oauth2._client.call_iam_generate_id_token_endpoint", autospec=True @@ -811,18 +812,19 @@ def test_refresh_iam_flow_non_gdu(self, call_iam_generate_id_token_endpoint): ) request = mock.Mock() credentials.refresh(request) - req, iam_endpoint, signer_email, target_audience, access_token = call_iam_generate_id_token_endpoint.call_args[ + req, iam_endpoint, signer_email, target_audience, access_token, universe_domain = call_iam_generate_id_token_endpoint.call_args[ 0 ] assert req == request assert ( iam_endpoint - == "https://iamcredentials.fake-universe/v1/projects/-/serviceAccounts/{}:generateIdToken" + == "https://iamcredentials.{}/v1/projects/-/serviceAccounts/{}:generateIdToken" ) assert signer_email == "service-account@example.com" assert target_audience == "https://example.com" decoded_access_token = jwt.decode(access_token, verify=False) assert decoded_access_token["scope"] == "https://www.googleapis.com/auth/iam" + assert universe_domain == "fake-universe" @mock.patch("google.oauth2._client.id_token_jwt_grant", autospec=True) def test_before_request_refreshes(self, id_token_jwt_grant): diff --git a/tests/test_impersonated_credentials.py b/tests/test_impersonated_credentials.py index f467269e2..0fe6e2329 100644 --- a/tests/test_impersonated_credentials.py +++ b/tests/test_impersonated_credentials.py @@ -146,6 +146,13 @@ def test_get_cred_info(self): "principal": "impersonated@project.iam.gserviceaccount.com", } + def test_universe_domain_matching_source(self): + source_credentials = service_account.Credentials( + SIGNER, "some@email.com", TOKEN_URI, universe_domain="foo.bar" + ) + credentials = self.make_credentials(source_credentials=source_credentials) + assert credentials.universe_domain == "foo.bar" + def test__make_copy_get_cred_info(self): credentials = self.make_credentials() credentials._cred_file_path = "/path/to/file" @@ -231,6 +238,38 @@ def test_refresh_success(self, use_data_bytes, mock_donor_credentials): == ACCESS_TOKEN_REQUEST_METRICS_HEADER_VALUE ) + @pytest.mark.parametrize("use_data_bytes", [True, False]) + def test_refresh_success_nonGdu(self, use_data_bytes, mock_donor_credentials): + source_credentials = service_account.Credentials( + SIGNER, "some@email.com", TOKEN_URI, universe_domain="foo.bar" + ) + credentials = self.make_credentials( + lifetime=None, source_credentials=source_credentials + ) + token = "token" + + expire_time = ( + _helpers.utcnow().replace(microsecond=0) + datetime.timedelta(seconds=500) + ).isoformat("T") + "Z" + response_body = {"accessToken": token, "expireTime": expire_time} + + request = self.make_request( + data=json.dumps(response_body), + status=http_client.OK, + use_data_bytes=use_data_bytes, + ) + + credentials.refresh(request) + + assert credentials.valid + assert not credentials.expired + # Confirm override endpoint used. + request_kwargs = request.call_args[1] + assert ( + request_kwargs["url"] + == "https://iamcredentials.foo.bar/v1/projects/-/serviceAccounts/impersonated@project.iam.gserviceaccount.com:generateAccessToken" + ) + @pytest.mark.parametrize("use_data_bytes", [True, False]) def test_refresh_success_iam_endpoint_override( self, use_data_bytes, mock_donor_credentials @@ -397,6 +436,38 @@ def test_service_account_email(self): def test_sign_bytes(self, mock_donor_credentials, mock_authorizedsession_sign): credentials = self.make_credentials(lifetime=None) + expected_url = "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/impersonated@project.iam.gserviceaccount.com:signBlob" + self._sign_bytes_helper( + credentials, + mock_donor_credentials, + mock_authorizedsession_sign, + expected_url, + ) + + def test_sign_bytes_nonGdu( + self, mock_donor_credentials, mock_authorizedsession_sign + ): + source_credentials = service_account.Credentials( + SIGNER, "some@email.com", TOKEN_URI, universe_domain="foo.bar" + ) + credentials = self.make_credentials( + lifetime=None, source_credentials=source_credentials + ) + expected_url = "https://iamcredentials.foo.bar/v1/projects/-/serviceAccounts/impersonated@project.iam.gserviceaccount.com:signBlob" + self._sign_bytes_helper( + credentials, + mock_donor_credentials, + mock_authorizedsession_sign, + expected_url, + ) + + def _sign_bytes_helper( + self, + credentials, + mock_donor_credentials, + mock_authorizedsession_sign, + expected_url, + ): token = "token" expire_time = ( @@ -412,11 +483,19 @@ def test_sign_bytes(self, mock_donor_credentials, mock_authorizedsession_sign): request.return_value = response credentials.refresh(request) - assert credentials.valid assert not credentials.expired signature = credentials.sign_bytes(b"signed bytes") + mock_authorizedsession_sign.assert_called_with( + mock.ANY, + "POST", + expected_url, + None, + json={"payload": "c2lnbmVkIGJ5dGVz", "delegates": []}, + headers={"Content-Type": "application/json"}, + ) + assert signature == b"signature" def test_sign_bytes_failure(self): @@ -563,6 +642,45 @@ def test_id_token_from_credential( self, mock_donor_credentials, mock_authorizedsession_idtoken ): credentials = self.make_credentials(lifetime=None) + target_credentials = self.make_credentials(lifetime=None) + expected_url = "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/impersonated@project.iam.gserviceaccount.com:generateIdToken" + self._test_id_token_helper( + credentials, + target_credentials, + mock_donor_credentials, + mock_authorizedsession_idtoken, + expected_url, + ) + + def test_id_token_from_credential_nonGdu( + self, mock_donor_credentials, mock_authorizedsession_idtoken + ): + source_credentials = service_account.Credentials( + SIGNER, "some@email.com", TOKEN_URI, universe_domain="foo.bar" + ) + credentials = self.make_credentials( + lifetime=None, source_credentials=source_credentials + ) + target_credentials = self.make_credentials( + lifetime=None, source_credentials=source_credentials + ) + expected_url = "https://iamcredentials.foo.bar/v1/projects/-/serviceAccounts/impersonated@project.iam.gserviceaccount.com:generateIdToken" + self._test_id_token_helper( + credentials, + target_credentials, + mock_donor_credentials, + mock_authorizedsession_idtoken, + expected_url, + ) + + def _test_id_token_helper( + self, + credentials, + target_credentials, + mock_donor_credentials, + mock_authorizedsession_idtoken, + expected_url, + ): token = "token" target_audience = "https://foo.bar" @@ -580,17 +698,19 @@ def test_id_token_from_credential( assert credentials.valid assert not credentials.expired - new_credentials = self.make_credentials(lifetime=None) - id_creds = impersonated_credentials.IDTokenCredentials( credentials, target_audience=target_audience, include_email=True ) - id_creds = id_creds.from_credentials(target_credentials=new_credentials) + id_creds = id_creds.from_credentials(target_credentials=target_credentials) id_creds.refresh(request) + args = mock_authorizedsession_idtoken.call_args.args + + assert args[2] == expected_url + assert id_creds.token == ID_TOKEN_DATA assert id_creds._include_email is True - assert id_creds._target_credentials is new_credentials + assert id_creds._target_credentials is target_credentials def test_id_token_with_target_audience( self, mock_donor_credentials, mock_authorizedsession_idtoken From 10f42a70e6089f1eecd060893632dd0ef40423f7 Mon Sep 17 00:00:00 2001 From: sai-sunder-s <4540365+sai-sunder-s@users.noreply.github.com> Date: Thu, 24 Oct 2024 21:19:07 +0000 Subject: [PATCH 05/12] fix: update secret (#1617) --- system_tests/secrets.tar.enc | Bin 10324 -> 10324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/system_tests/secrets.tar.enc b/system_tests/secrets.tar.enc index a13879adc306e55886c219a6e4ffe55218b1dc06..2d3f631e9751498b0e0f83c67065b6affcd2872f 100644 GIT binary patch literal 10324 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 literal 10324 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 From 168fcc63593cb1da018b86070e20a576d5b93b7b Mon Sep 17 00:00:00 2001 From: Timur Sadykov Date: Thu, 24 Oct 2024 15:03:37 -0700 Subject: [PATCH 06/12] fix: change universe_domain to universe-domain (#1613) --- google/auth/compute_engine/_metadata.py | 2 +- tests/compute_engine/test__metadata.py | 14 +++++++------- tests/compute_engine/test_credentials.py | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/google/auth/compute_engine/_metadata.py b/google/auth/compute_engine/_metadata.py index b66d9f9b3..8d692972f 100644 --- a/google/auth/compute_engine/_metadata.py +++ b/google/auth/compute_engine/_metadata.py @@ -294,7 +294,7 @@ def get_universe_domain(request): 404 occurs while retrieving metadata. """ universe_domain = get( - request, "universe/universe_domain", return_none_for_not_found_error=True + request, "universe/universe-domain", return_none_for_not_found_error=True ) if not universe_domain: return "googleapis.com" diff --git a/tests/compute_engine/test__metadata.py b/tests/compute_engine/test__metadata.py index f49886d71..c5f80d897 100644 --- a/tests/compute_engine/test__metadata.py +++ b/tests/compute_engine/test__metadata.py @@ -397,7 +397,7 @@ def test_get_universe_domain_success(): request.assert_called_once_with( method="GET", - url=_metadata._METADATA_ROOT + "universe/universe_domain", + url=_metadata._METADATA_ROOT + "universe/universe-domain", headers=_metadata._METADATA_HEADERS, ) assert universe_domain == "fake_universe_domain" @@ -410,7 +410,7 @@ def test_get_universe_domain_success_empty_response(): request.assert_called_once_with( method="GET", - url=_metadata._METADATA_ROOT + "universe/universe_domain", + url=_metadata._METADATA_ROOT + "universe/universe-domain", headers=_metadata._METADATA_HEADERS, ) assert universe_domain == "googleapis.com" @@ -425,7 +425,7 @@ def test_get_universe_domain_not_found(): request.assert_called_once_with( method="GET", - url=_metadata._METADATA_ROOT + "universe/universe_domain", + url=_metadata._METADATA_ROOT + "universe/universe-domain", headers=_metadata._METADATA_HEADERS, ) assert universe_domain == "googleapis.com" @@ -445,7 +445,7 @@ def test_get_universe_domain_retryable_error_failure(): request.assert_called_with( method="GET", - url=_metadata._METADATA_ROOT + "universe/universe_domain", + url=_metadata._METADATA_ROOT + "universe/universe-domain", headers=_metadata._METADATA_HEADERS, ) assert request.call_count == 5 @@ -487,12 +487,12 @@ def request(self, *args, **kwargs): request_error.assert_called_once_with( method="GET", - url=_metadata._METADATA_ROOT + "universe/universe_domain", + url=_metadata._METADATA_ROOT + "universe/universe-domain", headers=_metadata._METADATA_HEADERS, ) request_ok.assert_called_once_with( method="GET", - url=_metadata._METADATA_ROOT + "universe/universe_domain", + url=_metadata._METADATA_ROOT + "universe/universe-domain", headers=_metadata._METADATA_HEADERS, ) @@ -511,7 +511,7 @@ def test_get_universe_domain_other_error(): request.assert_called_once_with( method="GET", - url=_metadata._METADATA_ROOT + "universe/universe_domain", + url=_metadata._METADATA_ROOT + "universe/universe-domain", headers=_metadata._METADATA_HEADERS, ) diff --git a/tests/compute_engine/test_credentials.py b/tests/compute_engine/test_credentials.py index 13983467f..fddfb7f64 100644 --- a/tests/compute_engine/test_credentials.py +++ b/tests/compute_engine/test_credentials.py @@ -491,7 +491,7 @@ def test_with_target_audience_integration(self): responses.add( responses.GET, "http://metadata.google.internal/computeMetadata/v1/universe/" - "universe_domain", + "universe-domain", status=200, content_type="application/json", json={}, @@ -673,7 +673,7 @@ def test_with_quota_project_integration(self): responses.add( responses.GET, "http://metadata.google.internal/computeMetadata/v1/universe/" - "universe_domain", + "universe-domain", status=200, content_type="application/json", json={}, From 0a4363a556455a29ececc1339385826e26459c65 Mon Sep 17 00:00:00 2001 From: Timur Sadykov Date: Thu, 24 Oct 2024 16:20:44 -0700 Subject: [PATCH 07/12] fix: revert templates for iam endpoints (#1614) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: revert templates for iam endpoints * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * tests update --------- Co-authored-by: Owl Bot --- google/auth/iam.py | 15 +++++++++------ google/auth/impersonated_credentials.py | 18 +++++++++--------- google/oauth2/_client.py | 5 ++++- tests/oauth2/test_service_account.py | 4 +--- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/google/auth/iam.py b/google/auth/iam.py index bed1930f5..dcf0dbf9d 100644 --- a/google/auth/iam.py +++ b/google/auth/iam.py @@ -25,6 +25,7 @@ from google.auth import _exponential_backoff from google.auth import _helpers +from google.auth import credentials from google.auth import crypt from google.auth import exceptions @@ -38,16 +39,18 @@ _IAM_SCOPE = ["https://www.googleapis.com/auth/iam"] _IAM_ENDPOINT = ( - "https://iamcredentials.{}/v1/projects/-" + "https://iamcredentials.googleapis.com/v1/projects/-" + "/serviceAccounts/{}:generateAccessToken" ) _IAM_SIGN_ENDPOINT = ( - "https://iamcredentials.{}/v1/projects/-" + "/serviceAccounts/{}:signBlob" + "https://iamcredentials.googleapis.com/v1/projects/-" + + "/serviceAccounts/{}:signBlob" ) _IAM_IDTOKEN_ENDPOINT = ( - "https://iamcredentials.{}/v1/" + "projects/-/serviceAccounts/{}:generateIdToken" + "https://iamcredentials.googleapis.com/v1/" + + "projects/-/serviceAccounts/{}:generateIdToken" ) @@ -87,9 +90,9 @@ def _make_signing_request(self, message): message = _helpers.to_bytes(message) method = "POST" - url = _IAM_SIGN_ENDPOINT.format( - self._credentials.universe_domain, self._service_account_email - ) + url = _IAM_SIGN_ENDPOINT.replace( + credentials.DEFAULT_UNIVERSE_DOMAIN, self._credentials.universe_domain + ).format(self._service_account_email) headers = {"Content-Type": "application/json"} body = json.dumps( {"payload": base64.b64encode(message).decode("utf-8")} diff --git a/google/auth/impersonated_credentials.py b/google/auth/impersonated_credentials.py index 3173a141f..22583da34 100644 --- a/google/auth/impersonated_credentials.py +++ b/google/auth/impersonated_credentials.py @@ -67,9 +67,9 @@ def _make_iam_token_request( `iamcredentials.googleapis.com` is not enabled or the `Service Account Token Creator` is not assigned """ - iam_endpoint = iam_endpoint_override or iam._IAM_ENDPOINT.format( - universe_domain, principal - ) + iam_endpoint = iam_endpoint_override or iam._IAM_ENDPOINT.replace( + credentials.DEFAULT_UNIVERSE_DOMAIN, universe_domain + ).format(principal) body = json.dumps(body).encode("utf-8") @@ -282,9 +282,9 @@ def _update_token(self, request): def sign_bytes(self, message): from google.auth.transport.requests import AuthorizedSession - iam_sign_endpoint = iam._IAM_SIGN_ENDPOINT.format( - self.universe_domain, self._target_principal - ) + iam_sign_endpoint = iam._IAM_SIGN_ENDPOINT.replace( + credentials.DEFAULT_UNIVERSE_DOMAIN, self.universe_domain + ).format(self._target_principal) body = { "payload": base64.b64encode(message).decode("utf-8"), @@ -434,10 +434,10 @@ def with_quota_project(self, quota_project_id): def refresh(self, request): from google.auth.transport.requests import AuthorizedSession - iam_sign_endpoint = iam._IAM_IDTOKEN_ENDPOINT.format( + iam_sign_endpoint = iam._IAM_IDTOKEN_ENDPOINT.replace( + credentials.DEFAULT_UNIVERSE_DOMAIN, self._target_credentials.universe_domain, - self._target_credentials.signer_email, - ) + ).format(self._target_credentials.signer_email) body = { "audience": self._target_audience, diff --git a/google/oauth2/_client.py b/google/oauth2/_client.py index ee5689120..98d9599cf 100644 --- a/google/oauth2/_client.py +++ b/google/oauth2/_client.py @@ -30,6 +30,7 @@ from google.auth import _exponential_backoff from google.auth import _helpers +from google.auth import credentials from google.auth import exceptions from google.auth import jwt from google.auth import metrics @@ -344,7 +345,9 @@ def call_iam_generate_id_token_endpoint( response_data = _token_endpoint_request( request, - iam_id_token_endpoint.format(universe_domain, signer_email), + iam_id_token_endpoint.replace( + credentials.DEFAULT_UNIVERSE_DOMAIN, universe_domain + ).format(signer_email), body, access_token=access_token, use_json=True, diff --git a/tests/oauth2/test_service_account.py b/tests/oauth2/test_service_account.py index 45e0d6c91..91a7d93e0 100644 --- a/tests/oauth2/test_service_account.py +++ b/tests/oauth2/test_service_account.py @@ -798,7 +798,6 @@ def test_refresh_iam_flow(self, call_iam_generate_id_token_endpoint): assert target_audience == "https://example.com" decoded_access_token = jwt.decode(access_token, verify=False) assert decoded_access_token["scope"] == "https://www.googleapis.com/auth/iam" - assert universe_domain == "googleapis.com" @mock.patch( "google.oauth2._client.call_iam_generate_id_token_endpoint", autospec=True @@ -818,13 +817,12 @@ def test_refresh_iam_flow_non_gdu(self, call_iam_generate_id_token_endpoint): assert req == request assert ( iam_endpoint - == "https://iamcredentials.{}/v1/projects/-/serviceAccounts/{}:generateIdToken" + == "https://iamcredentials.fake-universe/v1/projects/-/serviceAccounts/{}:generateIdToken" ) assert signer_email == "service-account@example.com" assert target_audience == "https://example.com" decoded_access_token = jwt.decode(access_token, verify=False) assert decoded_access_token["scope"] == "https://www.googleapis.com/auth/iam" - assert universe_domain == "fake-universe" @mock.patch("google.oauth2._client.id_token_jwt_grant", autospec=True) def test_before_request_refreshes(self, id_token_jwt_grant): From b4efa646d75faf72c74c447428f5fcee2d4dae24 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Tue, 29 Oct 2024 16:37:26 -0400 Subject: [PATCH 08/12] chore: update templated files (#1618) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: update templated files * 🦉 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 --- .github/.OwlBot.lock.yaml | 4 +- .kokoro/docker/docs/requirements.txt | 42 +- .kokoro/docs/common.cfg | 6 +- .kokoro/release.sh | 2 +- .kokoro/release/common.cfg | 8 +- .kokoro/requirements.txt | 610 +++++++++++++-------------- 6 files changed, 319 insertions(+), 353 deletions(-) diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index 597e0c326..13fc69ce9 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:e8dcfd7cbfd8beac3a3ff8d3f3185287ea0625d859168cc80faccfc9a7a00455 -# created: 2024-09-16T21:04:09.091105552Z + digest: sha256:5efdf8d38e5a22c1ec9e5541cbdfde56399bdffcb6f531183f84ac66052a8024 +# created: 2024-10-25 diff --git a/.kokoro/docker/docs/requirements.txt b/.kokoro/docker/docs/requirements.txt index 7129c7715..66eacc82f 100644 --- a/.kokoro/docker/docs/requirements.txt +++ b/.kokoro/docker/docs/requirements.txt @@ -4,39 +4,39 @@ # # pip-compile --allow-unsafe --generate-hashes requirements.in # -argcomplete==3.4.0 \ - --hash=sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5 \ - --hash=sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f +argcomplete==3.5.1 \ + --hash=sha256:1a1d148bdaa3e3b93454900163403df41448a248af01b6e849edc5ac08e6c363 \ + --hash=sha256:eb1ee355aa2557bd3d0145de7b06b2a45b0ce461e1e7813f5d066039ab4177b4 # via nox colorlog==6.8.2 \ --hash=sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44 \ --hash=sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33 # via nox -distlib==0.3.8 \ - --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ - --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 +distlib==0.3.9 \ + --hash=sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 \ + --hash=sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403 # via virtualenv -filelock==3.15.4 \ - --hash=sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb \ - --hash=sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7 +filelock==3.16.1 \ + --hash=sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 \ + --hash=sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435 # via virtualenv -nox==2024.4.15 \ - --hash=sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565 \ - --hash=sha256:ecf6700199cdfa9e5ea0a41ff5e6ef4641d09508eda6edb89d9987864115817f +nox==2024.10.9 \ + --hash=sha256:1d36f309a0a2a853e9bccb76bbef6bb118ba92fa92674d15604ca99adeb29eab \ + --hash=sha256:7aa9dc8d1c27e9f45ab046ffd1c3b2c4f7c91755304769df231308849ebded95 # via -r requirements.in packaging==24.1 \ --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 # via nox -platformdirs==4.2.2 \ - --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ - --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 +platformdirs==4.3.6 \ + --hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \ + --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb # via virtualenv -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.0.2 \ + --hash=sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38 \ + --hash=sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed # via nox -virtualenv==20.26.3 \ - --hash=sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a \ - --hash=sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 +virtualenv==20.26.6 \ + --hash=sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48 \ + --hash=sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2 # via nox diff --git a/.kokoro/docs/common.cfg b/.kokoro/docs/common.cfg index 980bff5db..a1aa466c8 100644 --- a/.kokoro/docs/common.cfg +++ b/.kokoro/docs/common.cfg @@ -30,9 +30,9 @@ env_vars: { env_vars: { key: "V2_STAGING_BUCKET" - # Push non-cloud library docs to `docs-staging-v2-staging` instead of the + # Push non-cloud library docs to `docs-staging-v2-dev` instead of the # Cloud RAD bucket `docs-staging-v2` - value: "docs-staging-v2-staging" + value: "docs-staging-v2-dev" } # It will upload the docker image after successful builds. @@ -64,4 +64,4 @@ before_action { keyname: "docuploader_service_account" } } -} \ No newline at end of file +} diff --git a/.kokoro/release.sh b/.kokoro/release.sh index 5b3d28e51..dcc6d1fef 100755 --- a/.kokoro/release.sh +++ b/.kokoro/release.sh @@ -23,7 +23,7 @@ python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source / export PYTHONUNBUFFERED=1 # Move into the package, build the distribution and upload. -TWINE_PASSWORD=$(cat "${KOKORO_KEYSTORE_DIR}/73713_google-cloud-pypi-token-keystore-2") +TWINE_PASSWORD=$(cat "${KOKORO_KEYSTORE_DIR}/73713_google-cloud-pypi-token-keystore-3") cd github/google-auth-library-python python3 setup.py sdist bdist_wheel twine upload --username __token__ --password "${TWINE_PASSWORD}" dist/* diff --git a/.kokoro/release/common.cfg b/.kokoro/release/common.cfg index 062ad3aa9..43bec962c 100644 --- a/.kokoro/release/common.cfg +++ b/.kokoro/release/common.cfg @@ -28,17 +28,11 @@ before_action { fetch_keystore { keystore_resource { keystore_config_id: 73713 - keyname: "google-cloud-pypi-token-keystore-2" + keyname: "google-cloud-pypi-token-keystore-3" } } } -# Tokens needed to report release status back to GitHub -env_vars: { - key: "SECRET_MANAGER_KEYS" - value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" -} - # Store the packages we uploaded to PyPI. That way, we have a record of exactly # what we published, which we can use to generate SBOMs and attestations. action { diff --git a/.kokoro/requirements.txt b/.kokoro/requirements.txt index 9622baf0b..006d8ef93 100644 --- a/.kokoro/requirements.txt +++ b/.kokoro/requirements.txt @@ -4,79 +4,94 @@ # # pip-compile --allow-unsafe --generate-hashes requirements.in # -argcomplete==3.4.0 \ - --hash=sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5 \ - --hash=sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f +argcomplete==3.5.1 \ + --hash=sha256:1a1d148bdaa3e3b93454900163403df41448a248af01b6e849edc5ac08e6c363 \ + --hash=sha256:eb1ee355aa2557bd3d0145de7b06b2a45b0ce461e1e7813f5d066039ab4177b4 # via nox -attrs==23.2.0 \ - --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ - --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 +attrs==24.2.0 \ + --hash=sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346 \ + --hash=sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 # via gcp-releasetool backports-tarfile==1.2.0 \ --hash=sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34 \ --hash=sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991 # via jaraco-context -cachetools==5.3.3 \ - --hash=sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945 \ - --hash=sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105 +cachetools==5.5.0 \ + --hash=sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292 \ + --hash=sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a # via google-auth -certifi==2024.7.4 \ - --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ - --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 +certifi==2024.8.30 \ + --hash=sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 \ + --hash=sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9 # via requests -cffi==1.16.0 \ - --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ - --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \ - --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \ - --hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \ - --hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \ - --hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \ - --hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \ - --hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \ - --hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \ - --hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \ - --hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \ - --hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \ - --hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \ - --hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \ - --hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \ - --hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \ - --hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \ - --hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \ - --hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \ - --hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \ - --hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \ - --hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \ - --hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \ - --hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \ - --hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \ - --hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \ - --hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \ - --hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \ - --hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \ - --hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \ - --hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \ - --hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \ - --hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \ - --hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \ - --hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \ - --hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \ - --hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \ - --hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \ - --hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \ - --hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \ - --hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \ - --hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \ - --hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \ - --hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \ - --hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \ - --hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \ - --hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \ - --hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \ - --hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \ - --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ - --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ - --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 +cffi==1.17.1 \ + --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ + --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \ + --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \ + --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \ + --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \ + --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \ + --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \ + --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \ + --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \ + --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \ + --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \ + --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \ + --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \ + --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \ + --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \ + --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \ + --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \ + --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \ + --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \ + --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \ + --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \ + --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \ + --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \ + --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \ + --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \ + --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \ + --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \ + --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \ + --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \ + --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \ + --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \ + --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \ + --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \ + --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \ + --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \ + --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \ + --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \ + --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \ + --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \ + --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \ + --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \ + --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \ + --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \ + --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \ + --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \ + --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \ + --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \ + --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \ + --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \ + --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \ + --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \ + --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \ + --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \ + --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \ + --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \ + --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \ + --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \ + --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \ + --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \ + --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \ + --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \ + --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \ + --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \ + --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \ + --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \ + --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \ + --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b # via cryptography charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ @@ -97,72 +112,67 @@ colorlog==6.8.2 \ # via # gcp-docuploader # nox -cryptography==42.0.8 \ - --hash=sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad \ - --hash=sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583 \ - --hash=sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b \ - --hash=sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c \ - --hash=sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1 \ - --hash=sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648 \ - --hash=sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949 \ - --hash=sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba \ - --hash=sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c \ - --hash=sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9 \ - --hash=sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d \ - --hash=sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c \ - --hash=sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e \ - --hash=sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2 \ - --hash=sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d \ - --hash=sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7 \ - --hash=sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70 \ - --hash=sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2 \ - --hash=sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7 \ - --hash=sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14 \ - --hash=sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe \ - --hash=sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e \ - --hash=sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71 \ - --hash=sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961 \ - --hash=sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7 \ - --hash=sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c \ - --hash=sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28 \ - --hash=sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842 \ - --hash=sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902 \ - --hash=sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801 \ - --hash=sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a \ - --hash=sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e +cryptography==43.0.1 \ + --hash=sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494 \ + --hash=sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 \ + --hash=sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d \ + --hash=sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062 \ + --hash=sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2 \ + --hash=sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4 \ + --hash=sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1 \ + --hash=sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 \ + --hash=sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84 \ + --hash=sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042 \ + --hash=sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d \ + --hash=sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962 \ + --hash=sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2 \ + --hash=sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa \ + --hash=sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d \ + --hash=sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365 \ + --hash=sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96 \ + --hash=sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47 \ + --hash=sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d \ + --hash=sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d \ + --hash=sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c \ + --hash=sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb \ + --hash=sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277 \ + --hash=sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172 \ + --hash=sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034 \ + --hash=sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a \ + --hash=sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289 # via # -r requirements.in # gcp-releasetool # secretstorage -distlib==0.3.8 \ - --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ - --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 +distlib==0.3.9 \ + --hash=sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 \ + --hash=sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403 # via virtualenv docutils==0.21.2 \ --hash=sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f \ --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2 # via readme-renderer -filelock==3.15.4 \ - --hash=sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb \ - --hash=sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7 +filelock==3.16.1 \ + --hash=sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 \ + --hash=sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435 # via virtualenv gcp-docuploader==0.6.5 \ --hash=sha256:30221d4ac3e5a2b9c69aa52fdbef68cc3f27d0e6d0d90e220fc024584b8d2318 \ --hash=sha256:b7458ef93f605b9d46a4bf3a8dc1755dad1f31d030c8679edf304e343b347eea # via -r requirements.in -gcp-releasetool==2.0.1 \ - --hash=sha256:34314a910c08e8911d9c965bd44f8f2185c4f556e737d719c33a41f6a610de96 \ - --hash=sha256:b0d5863c6a070702b10883d37c4bdfd74bf930fe417f36c0c965d3b7c779ae62 +gcp-releasetool==2.1.1 \ + --hash=sha256:25639269f4eae510094f9dbed9894977e1966933211eb155a451deebc3fc0b30 \ + --hash=sha256:845f4ded3d9bfe8cc7fdaad789e83f4ea014affa77785259a7ddac4b243e099e # via -r requirements.in -google-api-core==2.19.1 \ - --hash=sha256:f12a9b8309b5e21d92483bbd47ce2c445861ec7d269ef6784ecc0ea8c1fa6125 \ - --hash=sha256:f4695f1e3650b316a795108a76a1c416e6afb036199d1c1f1f110916df479ffd +google-api-core==2.21.0 \ + --hash=sha256:4a152fd11a9f774ea606388d423b68aa7e6d6a0ffe4c8266f74979613ec09f81 \ + --hash=sha256:6869eacb2a37720380ba5898312af79a4d30b8bca1548fb4093e0697dc4bdf5d # via # google-cloud-core # google-cloud-storage -google-auth==2.31.0 \ - --hash=sha256:042c4702efa9f7d3c48d3a69341c209381b125faa6dbf3ebe56bc7e40ae05c23 \ - --hash=sha256:87805c36970047247c8afe614d4e3af8eceafc1ebba0c679fe75ddd1d575e871 +google-auth==2.35.0 \ + --hash=sha256:25df55f327ef021de8be50bad0dfd4a916ad0de96da86cd05661c9297723ad3f \ + --hash=sha256:f4c64ed4e01e8e8b646ef34c018f8bf3338df0c8e37d8b3bba40e7f574a3278a # via # gcp-releasetool # google-api-core @@ -172,97 +182,56 @@ google-cloud-core==2.4.1 \ --hash=sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073 \ --hash=sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61 # via google-cloud-storage -google-cloud-storage==2.17.0 \ - --hash=sha256:49378abff54ef656b52dca5ef0f2eba9aa83dc2b2c72c78714b03a1a95fe9388 \ - --hash=sha256:5b393bc766b7a3bc6f5407b9e665b2450d36282614b7945e570b3480a456d1e1 +google-cloud-storage==2.18.2 \ + --hash=sha256:97a4d45c368b7d401ed48c4fdfe86e1e1cb96401c9e199e419d289e2c0370166 \ + --hash=sha256:aaf7acd70cdad9f274d29332673fcab98708d0e1f4dceb5a5356aaef06af4d99 # via gcp-docuploader -google-crc32c==1.5.0 \ - --hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \ - --hash=sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876 \ - --hash=sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c \ - --hash=sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289 \ - --hash=sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298 \ - --hash=sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02 \ - --hash=sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f \ - --hash=sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2 \ - --hash=sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a \ - --hash=sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb \ - --hash=sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210 \ - --hash=sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5 \ - --hash=sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee \ - --hash=sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c \ - --hash=sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a \ - --hash=sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314 \ - --hash=sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd \ - --hash=sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65 \ - --hash=sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37 \ - --hash=sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4 \ - --hash=sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13 \ - --hash=sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894 \ - --hash=sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31 \ - --hash=sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e \ - --hash=sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709 \ - --hash=sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740 \ - --hash=sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc \ - --hash=sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d \ - --hash=sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c \ - --hash=sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c \ - --hash=sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d \ - --hash=sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906 \ - --hash=sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61 \ - --hash=sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57 \ - --hash=sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c \ - --hash=sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a \ - --hash=sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438 \ - --hash=sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946 \ - --hash=sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7 \ - --hash=sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96 \ - --hash=sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091 \ - --hash=sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae \ - --hash=sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d \ - --hash=sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88 \ - --hash=sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2 \ - --hash=sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd \ - --hash=sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541 \ - --hash=sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728 \ - --hash=sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178 \ - --hash=sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968 \ - --hash=sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346 \ - --hash=sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8 \ - --hash=sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93 \ - --hash=sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7 \ - --hash=sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273 \ - --hash=sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462 \ - --hash=sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94 \ - --hash=sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd \ - --hash=sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e \ - --hash=sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57 \ - --hash=sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b \ - --hash=sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9 \ - --hash=sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a \ - --hash=sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100 \ - --hash=sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325 \ - --hash=sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183 \ - --hash=sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556 \ - --hash=sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4 +google-crc32c==1.6.0 \ + --hash=sha256:05e2d8c9a2f853ff116db9706b4a27350587f341eda835f46db3c0a8c8ce2f24 \ + --hash=sha256:18e311c64008f1f1379158158bb3f0c8d72635b9eb4f9545f8cf990c5668e59d \ + --hash=sha256:236c87a46cdf06384f614e9092b82c05f81bd34b80248021f729396a78e55d7e \ + --hash=sha256:35834855408429cecf495cac67ccbab802de269e948e27478b1e47dfb6465e57 \ + --hash=sha256:386122eeaaa76951a8196310432c5b0ef3b53590ef4c317ec7588ec554fec5d2 \ + --hash=sha256:40b05ab32a5067525670880eb5d169529089a26fe35dce8891127aeddc1950e8 \ + --hash=sha256:48abd62ca76a2cbe034542ed1b6aee851b6f28aaca4e6551b5599b6f3ef175cc \ + --hash=sha256:50cf2a96da226dcbff8671233ecf37bf6e95de98b2a2ebadbfdf455e6d05df42 \ + --hash=sha256:51c4f54dd8c6dfeb58d1df5e4f7f97df8abf17a36626a217f169893d1d7f3e9f \ + --hash=sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa \ + --hash=sha256:62f6d4a29fea082ac4a3c9be5e415218255cf11684ac6ef5488eea0c9132689b \ + --hash=sha256:6eceb6ad197656a1ff49ebfbbfa870678c75be4344feb35ac1edf694309413dc \ + --hash=sha256:7aec8e88a3583515f9e0957fe4f5f6d8d4997e36d0f61624e70469771584c760 \ + --hash=sha256:91ca8145b060679ec9176e6de4f89b07363d6805bd4760631ef254905503598d \ + --hash=sha256:a184243544811e4a50d345838a883733461e67578959ac59964e43cca2c791e7 \ + --hash=sha256:a9e4b426c3702f3cd23b933436487eb34e01e00327fac20c9aebb68ccf34117d \ + --hash=sha256:bb0966e1c50d0ef5bc743312cc730b533491d60585a9a08f897274e57c3f70e0 \ + --hash=sha256:bb8b3c75bd157010459b15222c3fd30577042a7060e29d42dabce449c087f2b3 \ + --hash=sha256:bd5e7d2445d1a958c266bfa5d04c39932dc54093fa391736dbfdb0f1929c1fb3 \ + --hash=sha256:c87d98c7c4a69066fd31701c4e10d178a648c2cac3452e62c6b24dc51f9fcc00 \ + --hash=sha256:d2952396dc604544ea7476b33fe87faedc24d666fb0c2d5ac971a2b9576ab871 \ + --hash=sha256:d8797406499f28b5ef791f339594b0b5fdedf54e203b5066675c406ba69d705c \ + --hash=sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9 \ + --hash=sha256:e2806553238cd076f0a55bddab37a532b53580e699ed8e5606d0de1f856b5205 \ + --hash=sha256:ebab974b1687509e5c973b5c4b8b146683e101e102e17a86bd196ecaa4d099fc \ + --hash=sha256:ed767bf4ba90104c1216b68111613f0d5926fb3780660ea1198fc469af410e9d \ + --hash=sha256:f7a1fc29803712f80879b0806cb83ab24ce62fc8daf0569f2204a0cfd7f68ed4 # via # google-cloud-storage # google-resumable-media -google-resumable-media==2.7.1 \ - --hash=sha256:103ebc4ba331ab1bfdac0250f8033627a2cd7cde09e7ccff9181e31ba4315b2c \ - --hash=sha256:eae451a7b2e2cdbaaa0fd2eb00cc8a1ee5e95e16b55597359cbc3d27d7d90e33 +google-resumable-media==2.7.2 \ + --hash=sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa \ + --hash=sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0 # via google-cloud-storage -googleapis-common-protos==1.63.2 \ - --hash=sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945 \ - --hash=sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87 +googleapis-common-protos==1.65.0 \ + --hash=sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63 \ + --hash=sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0 # via google-api-core -idna==3.7 \ - --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ - --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 +idna==3.10 \ + --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ + --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 # via requests -importlib-metadata==8.0.0 \ - --hash=sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f \ - --hash=sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812 +importlib-metadata==8.5.0 \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 # via # -r requirements.in # keyring @@ -271,13 +240,13 @@ jaraco-classes==3.4.0 \ --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 # via keyring -jaraco-context==5.3.0 \ - --hash=sha256:3e16388f7da43d384a1a7cd3452e72e14732ac9fe459678773a3608a812bf266 \ - --hash=sha256:c2f67165ce1f9be20f32f650f25d8edfc1646a8aeee48ae06fb35f90763576d2 +jaraco-context==6.0.1 \ + --hash=sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3 \ + --hash=sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4 # via keyring -jaraco-functools==4.0.1 \ - --hash=sha256:3b24ccb921d6b593bdceb56ce14799204f473976e2a9d4b15b04d0f2c2326664 \ - --hash=sha256:d33fa765374c0611b52f8b3a795f8900869aa88c84769d4d1746cd68fb28c3e8 +jaraco-functools==4.1.0 \ + --hash=sha256:70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d \ + --hash=sha256:ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649 # via keyring jeepney==0.8.0 \ --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ @@ -289,9 +258,9 @@ jinja2==3.1.4 \ --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d # via gcp-releasetool -keyring==25.2.1 \ - --hash=sha256:2458681cdefc0dbc0b7eb6cf75d0b98e59f9ad9b2d4edd319d18f68bdca95e50 \ - --hash=sha256:daaffd42dbda25ddafb1ad5fec4024e5bbcfe424597ca1ca452b299861e49f1b +keyring==25.4.1 \ + --hash=sha256:5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf \ + --hash=sha256:b07ebc55f3e8ed86ac81dd31ef14e81ace9dd9c3d4b5d77a6e9a2016d0d71a1b # via # gcp-releasetool # twine @@ -299,75 +268,76 @@ markdown-it-py==3.0.0 \ --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb # via rich -markupsafe==2.1.5 \ - --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ - --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ - --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ - --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ - --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ - --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ - --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ - --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ - --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ - --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ - --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ - --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ - --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ - --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ - --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ - --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ - --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ - --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ - --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ - --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ - --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ - --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ - --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ - --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ - --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ - --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ - --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ - --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ - --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ - --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ - --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ - --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ - --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ - --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ - --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ - --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ - --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ - --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ - --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ - --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ - --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ - --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ - --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ - --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ - --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ - --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ - --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ - --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ - --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ - --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ - --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ - --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ - --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ - --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ - --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ - --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ - --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ - --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ - --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ - --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 +markupsafe==3.0.1 \ + --hash=sha256:0778de17cff1acaeccc3ff30cd99a3fd5c50fc58ad3d6c0e0c4c58092b859396 \ + --hash=sha256:0f84af7e813784feb4d5e4ff7db633aba6c8ca64a833f61d8e4eade234ef0c38 \ + --hash=sha256:17b2aea42a7280db02ac644db1d634ad47dcc96faf38ab304fe26ba2680d359a \ + --hash=sha256:242d6860f1fd9191aef5fae22b51c5c19767f93fb9ead4d21924e0bcb17619d8 \ + --hash=sha256:244dbe463d5fb6d7ce161301a03a6fe744dac9072328ba9fc82289238582697b \ + --hash=sha256:26627785a54a947f6d7336ce5963569b5d75614619e75193bdb4e06e21d447ad \ + --hash=sha256:2a4b34a8d14649315c4bc26bbfa352663eb51d146e35eef231dd739d54a5430a \ + --hash=sha256:2ae99f31f47d849758a687102afdd05bd3d3ff7dbab0a8f1587981b58a76152a \ + --hash=sha256:312387403cd40699ab91d50735ea7a507b788091c416dd007eac54434aee51da \ + --hash=sha256:3341c043c37d78cc5ae6e3e305e988532b072329639007fd408a476642a89fd6 \ + --hash=sha256:33d1c36b90e570ba7785dacd1faaf091203d9942bc036118fab8110a401eb1a8 \ + --hash=sha256:3e683ee4f5d0fa2dde4db77ed8dd8a876686e3fc417655c2ece9a90576905344 \ + --hash=sha256:3ffb4a8e7d46ed96ae48805746755fadd0909fea2306f93d5d8233ba23dda12a \ + --hash=sha256:40621d60d0e58aa573b68ac5e2d6b20d44392878e0bfc159012a5787c4e35bc8 \ + --hash=sha256:40f1e10d51c92859765522cbd79c5c8989f40f0419614bcdc5015e7b6bf97fc5 \ + --hash=sha256:45d42d132cff577c92bfba536aefcfea7e26efb975bd455db4e6602f5c9f45e7 \ + --hash=sha256:48488d999ed50ba8d38c581d67e496f955821dc183883550a6fbc7f1aefdc170 \ + --hash=sha256:4935dd7883f1d50e2ffecca0aa33dc1946a94c8f3fdafb8df5c330e48f71b132 \ + --hash=sha256:4c2d64fdba74ad16138300815cfdc6ab2f4647e23ced81f59e940d7d4a1469d9 \ + --hash=sha256:4c8817557d0de9349109acb38b9dd570b03cc5014e8aabf1cbddc6e81005becd \ + --hash=sha256:4ffaaac913c3f7345579db4f33b0020db693f302ca5137f106060316761beea9 \ + --hash=sha256:5a4cb365cb49b750bdb60b846b0c0bc49ed62e59a76635095a179d440540c346 \ + --hash=sha256:62fada2c942702ef8952754abfc1a9f7658a4d5460fabe95ac7ec2cbe0d02abc \ + --hash=sha256:67c519635a4f64e495c50e3107d9b4075aec33634272b5db1cde839e07367589 \ + --hash=sha256:6a54c43d3ec4cf2a39f4387ad044221c66a376e58c0d0e971d47c475ba79c6b5 \ + --hash=sha256:7044312a928a66a4c2a22644147bc61a199c1709712069a344a3fb5cfcf16915 \ + --hash=sha256:730d86af59e0e43ce277bb83970530dd223bf7f2a838e086b50affa6ec5f9295 \ + --hash=sha256:800100d45176652ded796134277ecb13640c1a537cad3b8b53da45aa96330453 \ + --hash=sha256:80fcbf3add8790caddfab6764bde258b5d09aefbe9169c183f88a7410f0f6dea \ + --hash=sha256:82b5dba6eb1bcc29cc305a18a3c5365d2af06ee71b123216416f7e20d2a84e5b \ + --hash=sha256:852dc840f6d7c985603e60b5deaae1d89c56cb038b577f6b5b8c808c97580f1d \ + --hash=sha256:8ad4ad1429cd4f315f32ef263c1342166695fad76c100c5d979c45d5570ed58b \ + --hash=sha256:8ae369e84466aa70f3154ee23c1451fda10a8ee1b63923ce76667e3077f2b0c4 \ + --hash=sha256:93e8248d650e7e9d49e8251f883eed60ecbc0e8ffd6349e18550925e31bd029b \ + --hash=sha256:973a371a55ce9ed333a3a0f8e0bcfae9e0d637711534bcb11e130af2ab9334e7 \ + --hash=sha256:9ba25a71ebf05b9bb0e2ae99f8bc08a07ee8e98c612175087112656ca0f5c8bf \ + --hash=sha256:a10860e00ded1dd0a65b83e717af28845bb7bd16d8ace40fe5531491de76b79f \ + --hash=sha256:a4792d3b3a6dfafefdf8e937f14906a51bd27025a36f4b188728a73382231d91 \ + --hash=sha256:a7420ceda262dbb4b8d839a4ec63d61c261e4e77677ed7c66c99f4e7cb5030dd \ + --hash=sha256:ad91738f14eb8da0ff82f2acd0098b6257621410dcbd4df20aaa5b4233d75a50 \ + --hash=sha256:b6a387d61fe41cdf7ea95b38e9af11cfb1a63499af2759444b99185c4ab33f5b \ + --hash=sha256:b954093679d5750495725ea6f88409946d69cfb25ea7b4c846eef5044194f583 \ + --hash=sha256:bbde71a705f8e9e4c3e9e33db69341d040c827c7afa6789b14c6e16776074f5a \ + --hash=sha256:beeebf760a9c1f4c07ef6a53465e8cfa776ea6a2021eda0d0417ec41043fe984 \ + --hash=sha256:c91b394f7601438ff79a4b93d16be92f216adb57d813a78be4446fe0f6bc2d8c \ + --hash=sha256:c97ff7fedf56d86bae92fa0a646ce1a0ec7509a7578e1ed238731ba13aabcd1c \ + --hash=sha256:cb53e2a99df28eee3b5f4fea166020d3ef9116fdc5764bc5117486e6d1211b25 \ + --hash=sha256:cbf445eb5628981a80f54087f9acdbf84f9b7d862756110d172993b9a5ae81aa \ + --hash=sha256:d06b24c686a34c86c8c1fba923181eae6b10565e4d80bdd7bc1c8e2f11247aa4 \ + --hash=sha256:d98e66a24497637dd31ccab090b34392dddb1f2f811c4b4cd80c230205c074a3 \ + --hash=sha256:db15ce28e1e127a0013dfb8ac243a8e392db8c61eae113337536edb28bdc1f97 \ + --hash=sha256:db842712984e91707437461930e6011e60b39136c7331e971952bb30465bc1a1 \ + --hash=sha256:e24bfe89c6ac4c31792793ad9f861b8f6dc4546ac6dc8f1c9083c7c4f2b335cd \ + --hash=sha256:e81c52638315ff4ac1b533d427f50bc0afc746deb949210bc85f05d4f15fd772 \ + --hash=sha256:e9393357f19954248b00bed7c56f29a25c930593a77630c719653d51e7669c2a \ + --hash=sha256:ee3941769bd2522fe39222206f6dd97ae83c442a94c90f2b7a25d847d40f4729 \ + --hash=sha256:f31ae06f1328595d762c9a2bf29dafd8621c7d3adc130cbb46278079758779ca \ + --hash=sha256:f94190df587738280d544971500b9cafc9b950d32efcb1fba9ac10d84e6aa4e6 \ + --hash=sha256:fa7d686ed9883f3d664d39d5a8e74d3c5f63e603c2e3ff0abcba23eac6542635 \ + --hash=sha256:fb532dd9900381d2e8f48172ddc5a59db4c445a11b9fab40b3b786da40d3b56b \ + --hash=sha256:fe32482b37b4b00c7a52a07211b479653b7fe4f22b2e481b9a9b099d8a430f2f # via jinja2 mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via markdown-it-py -more-itertools==10.3.0 \ - --hash=sha256:e5d93ef411224fbcef366a6e8ddc4c5781bc6359d43412a65dd5964e46111463 \ - --hash=sha256:ea6a02e24a9161e51faad17a8782b92a0df82c12c1c8886fec7f0c3fa1a1b320 +more-itertools==10.5.0 \ + --hash=sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef \ + --hash=sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6 # via # jaraco-classes # jaraco-functools @@ -389,9 +359,9 @@ nh3==0.2.18 \ --hash=sha256:de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307 \ --hash=sha256:f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe # via readme-renderer -nox==2024.4.15 \ - --hash=sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565 \ - --hash=sha256:ecf6700199cdfa9e5ea0a41ff5e6ef4641d09508eda6edb89d9987864115817f +nox==2024.10.9 \ + --hash=sha256:1d36f309a0a2a853e9bccb76bbef6bb118ba92fa92674d15604ca99adeb29eab \ + --hash=sha256:7aa9dc8d1c27e9f45ab046ffd1c3b2c4f7c91755304769df231308849ebded95 # via -r requirements.in packaging==24.1 \ --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ @@ -403,41 +373,41 @@ pkginfo==1.10.0 \ --hash=sha256:5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297 \ --hash=sha256:889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097 # via twine -platformdirs==4.2.2 \ - --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ - --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 +platformdirs==4.3.6 \ + --hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \ + --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb # via virtualenv proto-plus==1.24.0 \ --hash=sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445 \ --hash=sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12 # via google-api-core -protobuf==5.27.2 \ - --hash=sha256:0e341109c609749d501986b835f667c6e1e24531096cff9d34ae411595e26505 \ - --hash=sha256:176c12b1f1c880bf7a76d9f7c75822b6a2bc3db2d28baa4d300e8ce4cde7409b \ - --hash=sha256:354d84fac2b0d76062e9b3221f4abbbacdfd2a4d8af36bab0474f3a0bb30ab38 \ - --hash=sha256:4fadd8d83e1992eed0248bc50a4a6361dc31bcccc84388c54c86e530b7f58863 \ - --hash=sha256:54330f07e4949d09614707c48b06d1a22f8ffb5763c159efd5c0928326a91470 \ - --hash=sha256:610e700f02469c4a997e58e328cac6f305f649826853813177e6290416e846c6 \ - --hash=sha256:7fc3add9e6003e026da5fc9e59b131b8f22b428b991ccd53e2af8071687b4fce \ - --hash=sha256:9e8f199bf7f97bd7ecebffcae45ebf9527603549b2b562df0fbc6d4d688f14ca \ - --hash=sha256:a109916aaac42bff84702fb5187f3edadbc7c97fc2c99c5ff81dd15dcce0d1e5 \ - --hash=sha256:b848dbe1d57ed7c191dfc4ea64b8b004a3f9ece4bf4d0d80a367b76df20bf36e \ - --hash=sha256:f3ecdef226b9af856075f28227ff2c90ce3a594d092c39bee5513573f25e2714 +protobuf==5.28.2 \ + --hash=sha256:2c69461a7fcc8e24be697624c09a839976d82ae75062b11a0972e41fd2cd9132 \ + --hash=sha256:35cfcb15f213449af7ff6198d6eb5f739c37d7e4f1c09b5d0641babf2cc0c68f \ + --hash=sha256:52235802093bd8a2811abbe8bf0ab9c5f54cca0a751fdd3f6ac2a21438bffece \ + --hash=sha256:59379674ff119717404f7454647913787034f03fe7049cbef1d74a97bb4593f0 \ + --hash=sha256:5e8a95246d581eef20471b5d5ba010d55f66740942b95ba9b872d918c459452f \ + --hash=sha256:87317e9bcda04a32f2ee82089a204d3a2f0d3c8aeed16568c7daf4756e4f1fe0 \ + --hash=sha256:8ddc60bf374785fb7cb12510b267f59067fa10087325b8e1855b898a0d81d276 \ + --hash=sha256:a8b9403fc70764b08d2f593ce44f1d2920c5077bf7d311fefec999f8c40f78b7 \ + --hash=sha256:c0ea0123dac3399a2eeb1a1443d82b7afc9ff40241433296769f7da42d142ec3 \ + --hash=sha256:ca53faf29896c526863366a52a8f4d88e69cd04ec9571ed6082fa117fac3ab36 \ + --hash=sha256:eeea10f3dc0ac7e6b4933d32db20662902b4ab81bf28df12218aa389e9c2102d # via # gcp-docuploader # gcp-releasetool # google-api-core # googleapis-common-protos # proto-plus -pyasn1==0.6.0 \ - --hash=sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c \ - --hash=sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473 +pyasn1==0.6.1 \ + --hash=sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629 \ + --hash=sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034 # via # pyasn1-modules # rsa -pyasn1-modules==0.4.0 \ - --hash=sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6 \ - --hash=sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b +pyasn1-modules==0.4.1 \ + --hash=sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd \ + --hash=sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c # via google-auth pycparser==2.22 \ --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ @@ -449,9 +419,9 @@ pygments==2.18.0 \ # via # readme-renderer # rich -pyjwt==2.8.0 \ - --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ - --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 +pyjwt==2.9.0 \ + --hash=sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850 \ + --hash=sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c # via gcp-releasetool pyperclip==1.9.0 \ --hash=sha256:b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310 @@ -481,9 +451,9 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==13.7.1 \ - --hash=sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222 \ - --hash=sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432 +rich==13.9.2 \ + --hash=sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c \ + --hash=sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1 # via twine rsa==4.9 \ --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ @@ -499,9 +469,9 @@ six==1.16.0 \ # via # gcp-docuploader # python-dateutil -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.0.2 \ + --hash=sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38 \ + --hash=sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed # via nox twine==5.1.1 \ --hash=sha256:215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997 \ @@ -510,28 +480,30 @@ twine==5.1.1 \ typing-extensions==4.12.2 \ --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 - # via -r requirements.in -urllib3==2.2.2 \ - --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ - --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 + # via + # -r requirements.in + # rich +urllib3==2.2.3 \ + --hash=sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac \ + --hash=sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9 # via # requests # twine -virtualenv==20.26.3 \ - --hash=sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a \ - --hash=sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 +virtualenv==20.26.6 \ + --hash=sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48 \ + --hash=sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2 # via nox -wheel==0.43.0 \ - --hash=sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85 \ - --hash=sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81 +wheel==0.44.0 \ + --hash=sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f \ + --hash=sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49 # via -r requirements.in -zipp==3.19.2 \ - --hash=sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19 \ - --hash=sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c +zipp==3.20.2 \ + --hash=sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350 \ + --hash=sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==70.2.0 \ - --hash=sha256:b8b8060bb426838fbe942479c90296ce976249451118ef566a5a0b7d8b78fb05 \ - --hash=sha256:bd63e505105011b25c3c11f753f7e3b8465ea739efddaccef8f0efac2137bac1 +setuptools==75.1.0 \ + --hash=sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2 \ + --hash=sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538 # via -r requirements.in From 6be19fb6ad571f3a8275db8ccdd7a69cf97e1ceb Mon Sep 17 00:00:00 2001 From: sai-sunder-s <4540365+sai-sunder-s@users.noreply.github.com> Date: Wed, 30 Oct 2024 16:38:43 +0000 Subject: [PATCH 09/12] fix: update secret (#1621) --- system_tests/secrets.tar.enc | Bin 10324 -> 10324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/system_tests/secrets.tar.enc b/system_tests/secrets.tar.enc index 2d3f631e9751498b0e0f83c67065b6affcd2872f..d0d4ce70215274b2e2ad05b9a5ce70940a328d5c 100644 GIT binary patch literal 10324 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 literal 10324 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 From 9e2789a208d58221292873b0095ae4e8a924a703 Mon Sep 17 00:00:00 2001 From: ohmayr Date: Wed, 30 Oct 2024 13:49:10 -0400 Subject: [PATCH 10/12] fix: remove base class to avoid type conflict (#1619) * fix: remove base class to avoid type conflict * remove unused import * disable coverage --- .coveragerc | 2 ++ google/auth/transport/_requests_base.py | 3 ++- google/auth/transport/requests.py | 5 ++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.coveragerc b/.coveragerc index 9ba3d3fe6..4192b8cf8 100644 --- a/.coveragerc +++ b/.coveragerc @@ -6,6 +6,8 @@ omit = */samples/* */conftest.py */google-cloud-sdk/lib/* + # NOTE: Temporarily disabling coverage for `_requests_base.py`. + */_requests_base.py exclude_lines = # Re-enable the standard pragma pragma: NO COVER diff --git a/google/auth/transport/_requests_base.py b/google/auth/transport/_requests_base.py index ec718d909..0608223d8 100644 --- a/google/auth/transport/_requests_base.py +++ b/google/auth/transport/_requests_base.py @@ -13,7 +13,8 @@ # limitations under the License. """Transport adapter for Base Requests.""" - +# NOTE: The coverage for this file is temporarily disabled in `.coveragerc` +# since it is currently unused. import abc diff --git a/google/auth/transport/requests.py b/google/auth/transport/requests.py index 68f67c59b..23a69783d 100644 --- a/google/auth/transport/requests.py +++ b/google/auth/transport/requests.py @@ -38,7 +38,6 @@ from google.auth import exceptions from google.auth import transport import google.auth.transport._mtls_helper -from google.auth.transport._requests_base import _BaseAuthorizedSession from google.oauth2 import service_account _LOGGER = logging.getLogger(__name__) @@ -293,7 +292,7 @@ def proxy_manager_for(self, *args, **kwargs): return super(_MutualTlsOffloadAdapter, self).proxy_manager_for(*args, **kwargs) -class AuthorizedSession(requests.Session, _BaseAuthorizedSession): +class AuthorizedSession(requests.Session): """A Requests Session class with credentials. This class is used to perform requests to API endpoints that require @@ -390,7 +389,7 @@ def __init__( default_host=None, ): super(AuthorizedSession, self).__init__() - _BaseAuthorizedSession.__init__(self, credentials) + self.credentials = credentials self._refresh_status_codes = refresh_status_codes self._max_refresh_attempts = max_refresh_attempts self._refresh_timeout = refresh_timeout From 8cf1cb1663fccd03ea17a1bf055d862bddf61406 Mon Sep 17 00:00:00 2001 From: Timur Sadykov Date: Wed, 30 Oct 2024 11:25:21 -0700 Subject: [PATCH 11/12] fix: adding default parameters to updated interfaces (#1622) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: adding default parameters to updated interfaces * fix: adding default UD parameter to client * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 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 --- google/auth/impersonated_credentials.py | 7 ++++++- google/oauth2/_client.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/google/auth/impersonated_credentials.py b/google/auth/impersonated_credentials.py index 22583da34..d51c8ef1e 100644 --- a/google/auth/impersonated_credentials.py +++ b/google/auth/impersonated_credentials.py @@ -46,7 +46,12 @@ def _make_iam_token_request( - request, principal, headers, body, universe_domain, iam_endpoint_override=None + request, + principal, + headers, + body, + universe_domain=credentials.DEFAULT_UNIVERSE_DOMAIN, + iam_endpoint_override=None, ): """Makes a request to the Google Cloud IAM service for an access token. Args: diff --git a/google/oauth2/_client.py b/google/oauth2/_client.py index 98d9599cf..5a9fc3503 100644 --- a/google/oauth2/_client.py +++ b/google/oauth2/_client.py @@ -325,7 +325,7 @@ def call_iam_generate_id_token_endpoint( signer_email, audience, access_token, - universe_domain, + universe_domain=credentials.DEFAULT_UNIVERSE_DOMAIN, ): """Call iam.generateIdToken endpoint to get ID token. From 3fae8f8368d4651cd11d4af3d80f687eab033175 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 09:22:02 -0700 Subject: [PATCH 12/12] chore(main): release 2.36.0 (#1601) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- CHANGELOG.md | 20 ++++++++++++++++++++ google/auth/version.py | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 730533a4d..2404b282e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,26 @@ [1]: https://pypi.org/project/google-auth/#history +## [2.36.0](https://github.com/googleapis/google-auth-library-python/compare/v2.35.0...v2.36.0) (2024-10-30) + + +### Features + +* IAM signblob retries ([#1600](https://github.com/googleapis/google-auth-library-python/issues/1600)) ([484c8db](https://github.com/googleapis/google-auth-library-python/commit/484c8db151690a4ae7b6b0ae38db0a8ede88df69)) +* Making iam endpoint universe-aware ([#1604](https://github.com/googleapis/google-auth-library-python/issues/1604)) ([16c728d](https://github.com/googleapis/google-auth-library-python/commit/16c728d30adb36e19aabe34f0ed5a95152d9a135)) +* Support External Account Authorized User as a Source Credential for impersonated credentials in ADC ([#1608](https://github.com/googleapis/google-auth-library-python/issues/1608)) ([875796c](https://github.com/googleapis/google-auth-library-python/commit/875796cbace847797898bc506eac188edbaa3192)) + + +### Bug Fixes + +* Adding default parameters to updated interfaces ([#1622](https://github.com/googleapis/google-auth-library-python/issues/1622)) ([8cf1cb1](https://github.com/googleapis/google-auth-library-python/commit/8cf1cb1663fccd03ea17a1bf055d862bddf61406)) +* Change universe_domain to universe-domain ([#1613](https://github.com/googleapis/google-auth-library-python/issues/1613)) ([168fcc6](https://github.com/googleapis/google-auth-library-python/commit/168fcc63593cb1da018b86070e20a576d5b93b7b)) +* Remove base class to avoid type conflict ([#1619](https://github.com/googleapis/google-auth-library-python/issues/1619)) ([9e2789a](https://github.com/googleapis/google-auth-library-python/commit/9e2789a208d58221292873b0095ae4e8a924a703)) +* Revert templates for iam endpoints ([#1614](https://github.com/googleapis/google-auth-library-python/issues/1614)) ([0a4363a](https://github.com/googleapis/google-auth-library-python/commit/0a4363a556455a29ececc1339385826e26459c65)) +* Update secret ([#1611](https://github.com/googleapis/google-auth-library-python/issues/1611)) ([f070de0](https://github.com/googleapis/google-auth-library-python/commit/f070de06492a5eed3fab54313272acb5f603193a)) +* Update secret ([#1617](https://github.com/googleapis/google-auth-library-python/issues/1617)) ([10f42a7](https://github.com/googleapis/google-auth-library-python/commit/10f42a70e6089f1eecd060893632dd0ef40423f7)) +* Update secret ([#1621](https://github.com/googleapis/google-auth-library-python/issues/1621)) ([6be19fb](https://github.com/googleapis/google-auth-library-python/commit/6be19fb6ad571f3a8275db8ccdd7a69cf97e1ceb)) + ## [2.35.0](https://github.com/googleapis/google-auth-library-python/compare/v2.34.0...v2.35.0) (2024-09-17) diff --git a/google/auth/version.py b/google/auth/version.py index 6610120c6..15dc37470 100644 --- a/google/auth/version.py +++ b/google/auth/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "2.35.0" +__version__ = "2.36.0"