Coverage for src/fastapi_cloud_cli/api/client.py: 100%

160 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-11-09 00:25 +0000

1import json 1aebfcdg

2import logging 1aebfcdg

3import time 1aebfcdg

4from collections.abc import Generator 1aebfcdg

5from contextlib import contextmanager 1aebfcdg

6from datetime import timedelta 1aebfcdg

7 

8import httpx 1aebfcdg

9import typer 1aebfcdg

10from agent_detector import detect_agent 1aebfcdg

11from pydantic import ValidationError 1aebfcdg

12from rich_toolkit.progress import Progress 1aebfcdg

13 

14from fastapi_cloud_cli import __version__ 1aebfcdg

15from fastapi_cloud_cli.config import Settings 1aebfcdg

16from fastapi_cloud_cli.utils.auth import AuthMode, Identity 1aebfcdg

17from fastapi_cloud_cli.utils.errors import ErrorToolkit 1aebfcdg

18 

19from ._errors import ( 1aebfcdg

20 StreamLogError, 

21 TooManyRetriesError, 

22 get_http_error_code, 

23 get_http_error_hint, 

24 handle_http_error, 

25) 

26from ._models import ( 1aebfcdg

27 TERMINAL_STATUSES, 

28 AppLogEntry, 

29 BuildLogAdapter, 

30 BuildLogLine, 

31 CustomDomain, 

32 CustomDomainsAPIResponse, 

33 Deployment, 

34 DeploymentStatus, 

35 EnvironmentVariableCreatePayload, 

36 EnvironmentVariableResponse, 

37) 

38from ._retry import ( 1aebfcdg

39 STREAM_LOGS_MAX_RETRIES, 

40 STREAM_LOGS_TIMEOUT, 

41 attempt, 

42 attempts, 

43) 

44 

45logger = logging.getLogger(__name__) 1aebfcdg

46 

47POLL_INTERVAL = 2.0 1aebfcdg

48POLL_TIMEOUT = timedelta(seconds=120) 1aebfcdg

49POLL_MAX_RETRIES = 5 1aebfcdg

50 

51 

52def _get_user_agent() -> str: 1aebfcdg

53 user_agent = f"fastapi-cloud-cli/{__version__}" 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

54 

55 if detection := detect_agent(minimum_confidence="high"): 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

56 user_agent = f"{user_agent} AI-Agent/{detection.agent}" 2czszIzYz'z^zjA

57 

58 return user_agent 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

59 

60 

61class APIClient(httpx.Client): 1aebfcdg

62 auth_mode: AuthMode 1abcd

63 

64 def __init__(self, use_deploy_token: bool = False) -> None: 1aebfcdg

65 settings = Settings.get() 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

66 identity = Identity() 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

67 

68 token: str | None 

69 if use_deploy_token and identity.deploy_token: 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

70 token = identity.deploy_token 2E tfW If' Xf` $fnb@fFbfgXbug

71 self.auth_mode = "token" 2E tfW If' Xf` $fnb@fFbfgXbug

72 else: 

73 token = identity.user_token 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfF SpG H lzTp:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfX ,qY Z Bz-q[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf( js) * Rzks{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f{ Kt| } 7zLtbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fob#upbqb:z$ugd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegGbbwHbIbcAcwlddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgYbCxZb0bsADxqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

74 self.auth_mode = "user" 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfF SpG H lzTp:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfX ,qY Z Bz-q[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf( js) * Rzks{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f{ Kt| } 7zLtbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fob#upbqb:z$ugd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegGbbwHbIbcAcwlddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgYbCxZb0bsADxqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

75 

76 headers = {"User-Agent": _get_user_agent()} 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

77 if token: 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

78 headers["Authorization"] = f"Bearer {token}" 2ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdje$j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrnrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeCkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*r+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPe]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5eTlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ejmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdaf!m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~waxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

79 

80 super().__init__( 2a ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{obzHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppyAczqprpdzezsptpupvpwpMgxpypzpApBpfzCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC gzD MpNpOphzLnPpQpizjzkzRp%bMnsfE F SpG H lzTptf:cUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T vd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b9p!p#p$p{b%p|b}b~bacbc'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylyzAAABACADAmynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daemznzLjMjozWdXdNjpzOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#jNncedeeefegeheOnPnQnqzRnSnFfieTnUnVn0dJdjee $j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqrzVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqEAszRqSqtzuzTqUqVqWqXq0gYqZq0q1q2qvz3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU wzV %q'q(qxz0n)q*qyzzzAz+q(b1nHfW X ,qY Z Bz-qIf[c.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # xd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchc~qarbrcricdrjckclcmcncerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvyFAGAHAIAJAwyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqeCzDzbkckEz1d2ddkFzek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBk2nseteuevewexe3n4n5nGz6n7nUfye8n9n!n5dLdzeb CkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYrHz9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*rKAIz+r,rJzKz-r.r/r:r;r'g=r?r@r[r]rLz^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ Mz% dsesfsNz(ngshsOzPzQzis*b)nWf' ( js) * RzksXf{cls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] zdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcAsBsCsDsucEsvcwcxcyczcFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyLAMANAOAPAGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGeSzTz2k3kUz6d7d4kVz5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k*nIeJeKeLeMeNe+n,n-nWz.n/n9fOe:n;n=n!dNdPef ]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=sXz:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtQAYzitjtZz0zktltmtntot[gptqtrtsttt1zutvtwtxtytzt?nAt@nBt[n]nCtDtad^ 2z_ EtFtGt3z^nHtIt4z5z6zJt,b_n#f` { Kt| } 7zLt$fbdMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFc1t2t3t4tGc5tHcIcJcKcLc6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyRASATAUAVAQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWe8z9zsltl!z#d$dul#zvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSl`nYeZe0e1e2e3e{n|n}n$z~nao;f4ebocodo(dPd5ec TlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpu%zahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuWA'zJuKu(z)zLuMuNuOuPufhQuRuSuTuUu*zVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlb+zmb5u6u7u,zio8u9u-z.z/z!u.bjo?fnbob#upbqb:z$u@fgd%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCbDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRc[u]u^u_uSc`uTcUcVcWcXc{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZyXAYAZA0A1A0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e;z=z,l-l?z)d*d.l@z/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimko'e(e)e*e+e,elomono[zoopocg-eqoroso-dRd.ed jmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQv]zohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v2A^z!v#v_z`z$v%v'v(v)vth*v+v,v-v.v{z/v:v;v=v?v@vto[vuo]vvowo^v_vkdDb|zEb`v{v|v}zxo}v~v~zaAbAaw:byoegFbGbbwHbIbcAcwfglddwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3cswtwuwvw4cww5c6c7c8c9cxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y3A4A5A6A7A!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[edAeAJmKmfA.d/dLmgAMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9mzo^e_e`e{e|e}eAoBoCohADoEorg~eFoGoHo=dTdafg !m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wiACh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~w8AjAaxbxkAlAcxdxexfxgxHhhxixjxkxlxmAmxnxoxpxqxrxIosxJotxKoLouxvxpdVbnAWbwxxxyxoAMozxAxpAqArABx=bNotgXbYbCxZb0bsADxugqdEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$bHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(cTxUxVxWx)cXx*c+c,c-c.cYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y9A!A#A$A%A-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhftAuA~manvA?d@dbnwAcniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynznOojfkflfmfnfofPoQoRoxASoToGgpfUoVoWo^dVdqf

81 base_url=settings.base_api_url, 

82 timeout=httpx.Timeout(20), 

83 headers=headers, 

84 ) 

85 

86 @contextmanager 1aebfcdg

87 def handle_http_errors( 1aebfcdg

88 self, 

89 progress: Progress, 

90 default_message: str | None = None, 

91 *, 

92 not_found_message: str | None = None, 

93 toolkit: ErrorToolkit | None = None, 

94 ) -> Generator[None, None, None]: 

95 # TODO: Once every command supports JSON output, require toolkit here 

96 # and let it be the single human/JSON error rendering boundary. 

97 

98 mode = toolkit.mode if toolkit else "human" 2ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{oHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppqprpsptpupvpwpMgxpypzpApBpCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC D MpNpOpLnPpQpRp%bMnsfE F SpG H TptfUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T GjHjIjJjKj9p!p#p$p'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylymynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daeLjMjWdXdNjOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#j$j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqRqSqTqUqVqWqXq0gYqZq0q1q2q3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU V %q'q(q0n)q*q+q(b1nHfW X ,qY Z -qIf.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # {j|j}j~jak~qarbrcrerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvywyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqebkck1d2ddkek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBkCkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYr9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*r+r,r-r.r/r:r;r'g=r?r@r[r]r^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ % dsesfs(ngshsis*b)nWf' ( js) * ksXfls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] XkYkZk0k1kAsBsCsDsFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGe2k3k6d7d4k5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=s:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtitjtktltmtntot[gptqtrtstttutvtwtxtytzt?nAt@nBt[n]nCtDtad^ _ EtFtGt^nHtItJt,b_n#f` { Kt| } Lt$fMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbnlolplqlrl1t2t3t4t6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWesltl#d$dulvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSlTlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpuahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuJuKuLuMuNuOuPufhQuRuSuTuUuVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlbmb5u6u7uio8u9u!u.bjo?fnbob#upbqb$u@f%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCb'l(l)l*l+l[u]u^u_u{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZy0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e,l-l)d*d.l/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimjmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQvohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v!v#v$v%v'v(v)vth*v+v,v-v.v/v:v;v=v?v@vto[vuo]vvowo^v_vkdDbEb`v{v|vxo}v~vaw:byoegFbGbbwHbIbcwfgdwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbEmFmGmHmImswtwuwvwxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[eJmKm.d/dLmMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9m!m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wCh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~waxbxcxdxexfxgxHhhxixjxkxlxmxnxoxpxqxrxIosxJotxKoLouxvxpdVbWbwxxxyxMozxAxBx=bNotgXbYbCxZb0bDxugEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$b_m`m{m|m}mTxUxVxWxYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhf~man?d@dbncniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynzn

99 

100 try: 2ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{oHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppqprpsptpupvpwpMgxpypzpApBpCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC D MpNpOpLnPpQpRp%bMnsfE F SpG H TptfUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T GjHjIjJjKj9p!p#p$p'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylymynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daeLjMjWdXdNjOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#j$j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqRqSqTqUqVqWqXq0gYqZq0q1q2q3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU V %q'q(q0n)q*q+q(b1nHfW X ,qY Z -qIf.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # {j|j}j~jak~qarbrcrerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvywyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqebkck1d2ddkek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBkCkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYr9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*r+r,r-r.r/r:r;r'g=r?r@r[r]r^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ % dsesfs(ngshsis*b)nWf' ( js) * ksXfls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] XkYkZk0k1kAsBsCsDsFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGe2k3k6d7d4k5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=s:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtitjtktltmtntot[gptqtrtstttutvtwtxtytzt?nAt@nBt[n]nCtDtad^ _ EtFtGt^nHtItJt,b_n#f` { Kt| } Lt$fMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbnlolplqlrl1t2t3t4t6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWesltl#d$dulvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSlTlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpuahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuJuKuLuMuNuOuPufhQuRuSuTuUuVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlbmb5u6u7uio8u9u!u.bjo?fnbob#upbqb$u@f%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCb'l(l)l*l+l[u]u^u_u{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZy0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e,l-l)d*d.l/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimjmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQvohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v!v#v$v%v'v(v)vth*v+v,v-v.v/v:v;v=v?v@vto[vuo]vvowo^v_vkdDbEb`v{v|vxo}v~vaw:byoegFbGbbwHbIbcwfgdwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbEmFmGmHmImswtwuwvwxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[eJmKm.d/dLmMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9m!m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wCh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~waxbxcxdxexfxgxHhhxixjxkxlxmxnxoxpxqxrxIosxJotxKoLouxvxpdVbWbwxxxyxMozxAxBx=bNotgXbYbCxZb0bDxugEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$b_m`m{m|m}mTxUxVxWxYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhf~man?d@dbncniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynzn

101 yield 2ljmj_d`d{dnjojpjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h`o{oHg|o}o~oIgapbpcpdpepfpJggphpipjpkplpKgmpnpopLgppqprpsptpupvpwpMgxpypzpApBpCpDpEpFpGpHpHnIpInJpJnKnKpLp/cC D MpNpOpLnPpQpRp%bMnsfE F SpG H TptfUpI J K 'bVpWpufL M N O P h ;cv i vfXpNgYpudwfZp0p1pxfQ R 2p3p4pS T GjHjIjJjKj9p!p#p$p'p(p)p*p+p,p-p.pyfzf/phyiyXoYoZo0ojykylymynyoy1oOgpy:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqPgQgcqAfdqeqfqRggqBfhqiqjqkqlqmqnqoqpqqq'hSgmiTgUgrqsqCfDfEftquqvq~daeLjMjWdXdNjOj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2j3j4jbe5j6j7j8jZd9j!j#j$j%jkeleme'j(j)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hwqxqVgyqzqAqWgBqCqDqEqFqGqXgHqIqJqKqLqMqYgNqOqPqZgQqRqSqTqUqVqWqXq0gYqZq0q1q2q3q4q5q6q7q8qWn9qXn!qYnZn#q$q@cU V %q'q(q0n)q*q+q(b1nHfW X ,qY Z -qIf.q0 1 2 )b/q:qJf3 4 5 6 7 j ]cw k Kf;q1g=qwdLf?q@q[qMf8 9 ]q^q_q! # {j|j}j~jak~qarbrcrerfrgrhrirjrkrlrNfOfmrrysy2o3o4o5otyuyvywyxyyy6o2gzynrorprqrrrsrtrurvrwrxryrzrArBrCr3g4gDrPfErFrGr5gHrQfIrJrKrLrMrNrOrPrQrRr,h6gqi7g8gSrTrRfSfTfUrVrWrpeqebkck1d2ddkek-hfkgkhkikjkkklkmknkok3dpkqkrksktkukrevkwkxkyk4dzkAkBkCkDkAeBeCeEkFkGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:hXrYr9gZr0r1r!g2r3r4r5r6r7r#g8r9r!r#r$r%r$g'r(r)r%g*r+r,r-r.r/r:r;r'g=r?r@r[r]r^r_r`r{r|r}r#n~r$nas%n'nbscs`c$ % dsesfs(ngshsis*b)nWf' ( js) * ksXfls+ , - +bmsnsYf. / : ; = l |cx m Zfos(gpsyd0fqsrsss1f? @ tsusvs[ ] XkYkZk0k1kAsBsCsDsFsGsHsIsJsKsLsMs2f3fNsByCy7o8o9o!oDyEyFyGyHyIy#o)gJyOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s*g+g4s4f5s6s7s,g8s5f9s!s#s$s%s's(s)s*s+s;h-gui.g/g,s-s6f7f8f.s/s:sFeGe2k3k6d7d4k5k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,k-k.kHe/k:k;k=k9d?k@k[k]k^kQeReSe_k`k{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[h;s=s:g?s@s[s;g]s^s_s`s{s|s=g}s~satbtctdt?getftgt@ghtitjtktltmtntot[gptqtrtstttutvtwtxtytzt?nAt@nBt[n]nCtDtad^ _ EtFtGt^nHtItJt,b_n#f` { Kt| } Lt$fMt~ abbb-bNtOt%fcbdbebfbgbn cdy o 'fPt]gQtAd(fRtStTt)fhbibUtVtWtjbkbnlolplqlrl1t2t3t4t6t7t8t9t!t#t$t%t*f+f'tLyMy$o%o'o(oNyOyPyQyRySy)o^gTy(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_g`g_t,f`t{t|t{g}t-f~taubucudueufuguhuiu]h|gyi}g~gjuku.f/f:flumunuVeWesltl#d$dulvl^hwlxlylzlAlBlClDlElFl%dGlHlIlJlKlLlXeMlNlOlPl'dQlRlSlTlUl6e7e8eVlWlXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{houpuahqurusubhtuuuvuwuxuyuchzuAuBuCuDuEudhFuGuHuehIuJuKuLuMuNuOuPufhQuRuSuTuUuVuWuXuYuZu0ueo1ufo2ugoho3u4ufdlbmb5u6u7uio8u9u!u.bjo?fnbob#upbqb$u@f%urbsbtb/b'u(u[fubvbwbxbybp hdz q ]f)ugh*uCd^f+u,u-u_fzbAb.u/u:uBbCb'l(l)l*l+l[u]u^u_u{u|u}u~uavbvcvdv`f{fevVyWy*o+o,o-oXyYyZy0y1y2y.ohh3yfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvihjhvv|fwvxvyvkhzv}fAvBvCvDvEvFvGvHvIvJv|hlhCimhnhKvLv~fagbgMvNvOv#e$e,l-l)d*d.l/l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lambm%ecmdmemfm,dgmhmimjmkm/e:e;elmmmnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbiPvQvohRvSvTvphUvVvWvXvYvZvqh0v1v2v3v4v5vrh6v7v8vsh9v!v#v$v%v'v(v)vth*v+v,v-v.v/v:v;v=v?v@vto[vuo]vvowo^v_vkdDbEb`v{v|vxo}v~vaw:byoegFbGbbwHbIbcwfgdwJbKbLb;bewfwggMbNbObPbQbr mdA s hggwuhhwEdigiwjwkwjgRbSblwmwnwTbUbEmFmGmHmImswtwuwvwxwywzwAwBwCwDwEwkglgFw5y6y/o:o;o=o7y8y9y!y#y$y?ovh%yGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwwhxhWwmgXwYwZwyh0wng1w2w3w4w5w6w7w8w9w!wcizhGiAhBh#w$wogpgqg%w'w(w@e[eJmKm.d/dLmMmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0m1m2m]e3m4m5m6m;d7m8m9m!m#mbfcfdf$m%m'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi)w*wCh+w,w-wDh.w/w:w;w=w?wEh@w[w]w^w_w`wFh{w|w}wGh~waxbxcxdxexfxgxHhhxixjxkxlxmxnxoxpxqxrxIosxJotxKoLouxvxpdVbWbwxxxyxMozxAxBx=bNotgXbYbCxZb0bDxugEx1b2b3b?bFxGxvg4b5b6b7b8bt rdB u wgHxIhIxGdxgJxKxLxyg9b!bMxNxOx#b$b_m`m{m|m}mTxUxVxWxYxZx0x1x2x3x4x5xzgAg6x(y)y@o[o]o^o*y+y,y-y.y/y_oJh:y7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/xKhLh:xBg;x=x?xMh@xCg[x]x^x_x`x{x|x}x~xayhiNhKiOhPhbycyDgEgFgdyeyfygfhf~man?d@dbncniidnenfngnhninjnknlnmn[dnnonpnqnrnsniftnunvnwn]dxnynzn

102 except httpx.ReadTimeout as e: 2_d`d{d|drfIdHgIgJgKgLgMgHnInJnKnLnMnsftfufvfwfxfyfzfXoYoZo0o1oOgPgQgAfRgBf'hSgmiTgUgCfDfEf~daeWdXdYdbeZdkelemeneGfKdVgWgXgYgZg0gWnXnYnZn0n1nHfIfJfKfLfMfNfOf2o3o4o5o6o2g3g4gPf5gQf,h6gqi7g8gRfSfTfpeqe1d2d3dre4dAeBeCeDeVfMd9g!g#g$g%g'g#n$n%n'n(n)nWfXfYfZf0f1f2f3f7o8o9o!o#o)g*g+g4f,g5f;h-gui.g/g6f7f8fFeGe6d7d8dHe9dQeReSeTe!fOd:g;g=g?g@g[g?n@n[n]n^n_n#f$f%f'f(f)f*f+f$o%o'o(o)o^g_g`g,f{g-f]h|gyi}g~g.f/f:fVeWe#d$d%dXe'd6e7e8e9e=fQdahbhchdhehfheofogohoiojo?f@f[f]f^f_f`f{f*o+o,o-o.ohhihjh|fkh}f|hlhCimhnh~fagbg#e$e)d*d+d%e,d/e:e;e=edgSdohphqhrhshthtouovowoxoyoegfggghgigjgkglg/o:o;o=o?ovhwhxhmgyhngcizhGiAhBhogpgqg@e[e.d/d:d]e;dbfcfdfefsgUdChDhEhFhGhHhIoJoKoLoMoNotgugvgwgxgygzgAg@o[o]o^o_oJhKhLhBgMhCghiNhKiOhPhDgEgFggfhf?d@d[dif]d

103 logger.debug(e) 2'hmi,hqi;hui]hyi|hCiciGihiKi

104 

105 message = ( 2'hmi,hqi;hui]hyi|hCiciGihiKi

106 "The request to the FastAPI Cloud server timed out." 

107 " Please try again later." 

108 ) 

109 

110 if mode == "json" and toolkit: 2'hmi,hqi;hui]hyi|hCiciGihiKi

111 toolkit.fail( 2miqiuiyiCiGiKi

112 "network_error", 

113 message, 

114 hint="Please try again later.", 

115 ) 

116 

117 progress.set_error(message) 2'h,h;h]h|hcihi

118 

119 raise typer.Exit(1) from None # pragma: no cover 2'h,h;h]h|hcihi

120 except httpx.HTTPError as e: 2_d`d{d|drfIdHgIgJgKgLgMgHnInJnKnLnMnsftfufvfwfxfyfzfXoYoZo0o1oOgPgQgAfRgBfSgTgUgCfDfEf~daeWdXdYdbeZdkelemeneGfKdVgWgXgYgZg0gWnXnYnZn0n1nHfIfJfKfLfMfNfOf2o3o4o5o6o2g3g4gPf5gQf6g7g8gRfSfTfpeqe1d2d3dre4dAeBeCeDeVfMd9g!g#g$g%g'g#n$n%n'n(n)nWfXfYfZf0f1f2f3f7o8o9o!o#o)g*g+g4f,g5f-g.g/g6f7f8fFeGe6d7d8dHe9dQeReSeTe!fOd:g;g=g?g@g[g?n@n[n]n^n_n#f$f%f'f(f)f*f+f$o%o'o(o)o^g_g`g,f{g-f|g}g~g.f/f:fVeWe#d$d%dXe'd6e7e8e9e=fQdahbhchdhehfheofogohoiojo?f@f[f]f^f_f`f{f*o+o,o-o.ohhihjh|fkh}flhmhnh~fagbg#e$e)d*d+d%e,d/e:e;e=edgSdohphqhrhshthtouovowoxoyoegfggghgigjgkglg/o:o;o=o?ovhwhxhmgyhngzhAhBhogpgqg@e[e.d/d:d]e;dbfcfdfefsgUdChDhEhFhGhHhIoJoKoLoMoNotgugvgwgxgygzgAg@o[o]o^o_oJhKhLhBgMhCgNhOhPhDgEgFggfhf?d@d[dif]d

121 logger.debug(e) 2_d`d{d|drfIdHgIgJgKgLgMgsftfufvfwfxfyfzfOgPgQgAfRgBfSgTgUgCfDfEf~daeWdXdYdbeZdkelemeneGfKdVgWgXgYgZg0gHfIfJfKfLfMfNfOf2g3g4gPf5gQf6g7g8gRfSfTfpeqe1d2d3dre4dAeBeCeDeVfMd9g!g#g$g%g'gWfXfYfZf0f1f2f3f)g*g+g4f,g5f-g.g/g6f7f8fFeGe6d7d8dHe9dQeReSeTe!fOd:g;g=g?g@g[g#f$f%f'f(f)f*f+f^g_g`g,f{g-f|g}g~g.f/f:fVeWe#d$d%dXe'd6e7e8e9e=fQdahbhchdhehfh?f@f[f]f^f_f`f{fhhihjh|fkh}flhmhnh~fagbg#e$e)d*d+d%e,d/e:e;e=edgSdohphqhrhshthegfggghgigjgkglgvhwhxhmgyhngzhAhBhogpgqg@e[e.d/d:d]e;dbfcfdfefsgUdChDhEhFhGhHhtgugvgwgxgygzgAgJhKhLhBgMhCgNhOhPhDgEgFggfhf?d@d[dif]d

122 

123 message = handle_http_error( 2_d`d{d|drfIdHgIgJgKgLgMgsftfufvfwfxfyfzfOgPgQgAfRgBfSgTgUgCfDfEf~daeWdXdYdbeZdkelemeneGfKdVgWgXgYgZg0gHfIfJfKfLfMfNfOf2g3g4gPf5gQf6g7g8gRfSfTfpeqe1d2d3dre4dAeBeCeDeVfMd9g!g#g$g%g'gWfXfYfZf0f1f2f3f)g*g+g4f,g5f-g.g/g6f7f8fFeGe6d7d8dHe9dQeReSeTe!fOd:g;g=g?g@g[g#f$f%f'f(f)f*f+f^g_g`g,f{g-f|g}g~g.f/f:fVeWe#d$d%dXe'd6e7e8e9e=fQdahbhchdhehfh?f@f[f]f^f_f`f{fhhihjh|fkh}flhmhnh~fagbg#e$e)d*d+d%e,d/e:e;e=edgSdohphqhrhshthegfggghgigjgkglgvhwhxhmgyhngzhAhBhogpgqg@e[e.d/d:d]e;dbfcfdfefsgUdChDhEhFhGhHhtgugvgwgxgygzgAgJhKhLhBgMhCgNhOhPhDgEgFggfhf?d@d[dif]d

124 e, 

125 default_message, 

126 not_found_message=not_found_message, 

127 auth_mode=self.auth_mode, 

128 ) 

129 code = get_http_error_code(e) 2_d`d{d|drfIdHgIgJgKgLgMgsftfufvfwfxfyfzfOgPgQgAfRgBfSgTgUgCfDfEf~daeWdXdYdbeZdkelemeneGfKdVgWgXgYgZg0gHfIfJfKfLfMfNfOf2g3g4gPf5gQf6g7g8gRfSfTfpeqe1d2d3dre4dAeBeCeDeVfMd9g!g#g$g%g'gWfXfYfZf0f1f2f3f)g*g+g4f,g5f-g.g/g6f7f8fFeGe6d7d8dHe9dQeReSeTe!fOd:g;g=g?g@g[g#f$f%f'f(f)f*f+f^g_g`g,f{g-f|g}g~g.f/f:fVeWe#d$d%dXe'd6e7e8e9e=fQdahbhchdhehfh?f@f[f]f^f_f`f{fhhihjh|fkh}flhmhnh~fagbg#e$e)d*d+d%e,d/e:e;e=edgSdohphqhrhshthegfggghgigjgkglgvhwhxhmgyhngzhAhBhogpgqg@e[e.d/d:d]e;dbfcfdfefsgUdChDhEhFhGhHhtgugvgwgxgygzgAgJhKhLhBgMhCgNhOhPhDgEgFggfhf?d@d[dif]d

130 

131 if mode == "json" and toolkit: 2_d`d{d|drfIdHgIgJgKgLgMgsftfufvfwfxfyfzfOgPgQgAfRgBfSgTgUgCfDfEf~daeWdXdYdbeZdkelemeneGfKdVgWgXgYgZg0gHfIfJfKfLfMfNfOf2g3g4gPf5gQf6g7g8gRfSfTfpeqe1d2d3dre4dAeBeCeDeVfMd9g!g#g$g%g'gWfXfYfZf0f1f2f3f)g*g+g4f,g5f-g.g/g6f7f8fFeGe6d7d8dHe9dQeReSeTe!fOd:g;g=g?g@g[g#f$f%f'f(f)f*f+f^g_g`g,f{g-f|g}g~g.f/f:fVeWe#d$d%dXe'd6e7e8e9e=fQdahbhchdhehfh?f@f[f]f^f_f`f{fhhihjh|fkh}flhmhnh~fagbg#e$e)d*d+d%e,d/e:e;e=edgSdohphqhrhshthegfggghgigjgkglgvhwhxhmgyhngzhAhBhogpgqg@e[e.d/d:d]e;dbfcfdfefsgUdChDhEhFhGhHhtgugvgwgxgygzgAgJhKhLhBgMhCgNhOhPhDgEgFggfhf?d@d[dif]d

132 toolkit.fail( 2_d`d{d|drfIdHgIgJgKgLgMgPgQgRgSgTgUg~daebekelemeneGfKdVgWgXgYgZg0g3g4g5g6g7g8gpeqereAeBeCeDeVfMd9g!g#g$g%g'g*g+g,g-g.g/gFeGeHeQeReSeTe!fOd:g;g=g?g@g[g_g`g{g|g}g~gVeWeXe6e7e8e9e=fQdahbhchdhehfhihjhkhlhmhnh#e$e%e/e:e;e=edgSdohphqhrhshthwhxhyhzhAhBh@e[e]ebfcfdfefsgUdChDhEhFhGhHhKhLhMhNhOhPhgfhfif

133 code, 

134 message, 

135 hint=get_http_error_hint(code, auth_mode=self.auth_mode), 

136 ) 

137 else: 

138 progress.set_error(message) 2sftfufvfwfxfyfzfOgAfBfCfDfEfWdXdYdZdHfIfJfKfLfMfNfOf2gPfQfRfSfTf1d2d3d4dWfXfYfZf0f1f2f3f)g4f5f6f7f8f6d7d8d9d#f$f%f'f(f)f*f+f^g,f-f.f/f:f#d$d%d'd?f@f[f]f^f_f`f{fhh|f}f~fagbg)d*d+d,degfggghgigjgkglgvhmgngogpgqg.d/d:d;dtgugvgwgxgygzgAgJhBgCgDgEgFg?d@d[d]d

139 

140 raise typer.Exit(1) from None 2sftfufvfwfxfyfzfOgAfBfCfDfEfWdXdYdZdHfIfJfKfLfMfNfOf2gPfQfRfSfTf1d2d3d4dWfXfYfZf0f1f2f3f)g4f5f6f7f8f6d7d8d9d#f$f%f'f(f)f*f+f^g,f-f.f/f:f#d$d%d'd?f@f[f]f^f_f`f{fhh|f}f~fagbg)d*d+d,degfggghgigjgkglgvhmgngogpgqg.d/d:d;dtgugvgwgxgygzgAgJhBgCgDgEgFg?d@d[d]d

141 

142 def get_deployment(self, deployment_id: str) -> Deployment: 1aebfcdg

143 response = self.get(f"/deployments/{deployment_id}") 2fB%b:c'budvd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b{b%p|b}b~bacbcgB(b[c)bwdxd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchcicdrjckclcmcnchB*b{c+bydzdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcucEsvcwcxcyczciB,bbd-bAdBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFcGc5tHcIcJcKcLcjB.bgd/bCdDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRcSc`uTcUcVcWcXckB:bld;bEdFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3c4cww5c6c7c8c9clB=bqd?bGdHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(c)cXx*c+c,c-c.c

144 response.raise_for_status() 2fB%b:c'budvd5pgy6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b{b%p|b}b~bacbcgB(b[c)bwdxd`qqy{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchcicdrjckclcmcnchB*b{c+bydzdwsAyxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcucEsvcwcxcyczciB,bbd-bAdBdXtKyYtZt0tddAcnlolBcedCcDcUeplqlrlEcFcGc5tHcIcJcKcLcjB.bgd/bCdDd;uUy=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRcSc`uTcUcVcWcXckB:bld;bEdFdow4ypwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3c4cww5c6c7c8c9clB=bqd?bGdHdPx'yQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(c)cXx*c+c,c-c.c

145 return Deployment.model_validate(response.json()) 2fB%b:c'bvd5p6p7p8p=c@bGjHj[b?c]b^b}dIjJjKj_b`b{b%p|b}b~bacbcgB(b[c)bxd`q{q|q}q^ccc{j|jdc_cecfcoe}j~jakgchcicdrjckclcmcnchB*b{c+bzdwsxsyszs}cocXkYkpc~cqcrcEeZk0k1ksctcucEsvcwcxcyczciB,bbd-bBdXtYtZt0tddAcnlolBcedCcDcUeplqlrlEcFcGc5tHcIcJcKcLcjB.bgd/bDd;u=u?u@uidMc'l(lNcjdOcPc!e)l*l+lQcRcSc`uTcUcVcWcXckB:bld;bFdowpwqwrwndYcEmFmZcod0c1c?eGmHmIm2c3c4cww5c6c7c8c9clB=bqd?bHdPxQxRxSxsd!c_m`m#ctd$c%cff{m|m}m'c(c)cXx*c+c,c-c.c

146 

147 def get_environment_variables(self, *, app_id: str) -> EnvironmentVariableResponse: 1aebfcdg

148 response = self.get(f"/apps/{app_id}/environment-variables/") 2Nj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2jdk-hfkgkhkikjkkklkmknkok3dpkqkrksk4k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,kul^hwlxlylzlAlBlClDlElFl%dGlHlIlJl.l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lLmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0mbniidnenfngnhninjnknlnmn[dnnonpnqn

149 response.raise_for_status() 2Nj(hPjQjRjSjTjUjVjWjXjYjYdZj0j1j2jdk-hfkgkhkikjkkklkmknkok3dpkqkrksk4k=h6k7k8k9k!k#k$k%k'k(k8d)k*k+k,kul^hwlxlylzlAlBlClDlElFl%dGlHlIlJl.l}h:l;l=l?l@l[l]l^l_l`l+d{l|l}l~lLmdiNmOmPmQmRmSmTmUmVmWm:dXmYmZm0mbniidnenfngnhninjnknlnmn[dnnonpnqn

150 

151 return EnvironmentVariableResponse.model_validate(response.json()) 2Nj(hPjQjRjSjTjUjVjWjXjYjZj0j1j2jdk-hfkgkhkikjkkklkmknkokpkqkrksk4k=h6k7k8k9k!k#k$k%k'k(k)k*k+k,kul^hwlxlylzlAlBlClDlElFlGlHlIlJl.l}h:l;l=l?l@l[l]l^l_l`l{l|l}l~lLmdiNmOmPmQmRmSmTmUmVmWmXmYmZm0mbniidnenfngnhninjnknlnmnnnonpnqn

152 

153 def batch_environment_variables( 1aebfcdg

154 self, 

155 *, 

156 app_id: str, 

157 upsert: dict[str, EnvironmentVariableCreatePayload], 

158 delete: list[str], 

159 redeploy: bool = True, 

160 ) -> EnvironmentVariableResponse: 

161 response = self.put( 2~daeLjMjWdXdOj(h3j4jbe5j6j7j8jZd9j!j#jpeqebkck1d2dek-htkukrevkwkxkyk4dzkAkBkFeGe2k3k6d7d5k=h-k.kHe/k:k;k=k9d?k@k[kVeWesltl#d$dvl^hKlLlXeMlNlOlPl'dQlRlSl#e$e,l-l)d*d/l}hambm%ecmdmemfm,dgmhmim@e[eJmKm.d/dMmdi1m2m]e3m4m5m6m;d7m8m9mgfhf~man?d@dcniirnsniftnunvnwn]dxnynzn

162 f"/apps/{app_id}/environment-variables/", 

163 json={ 

164 "upsert": { 

165 name: payload.model_dump() for name, payload in upsert.items() 

166 }, 

167 "delete": delete, 

168 "redeploy": redeploy, 

169 }, 

170 ) 

171 response.raise_for_status() 2~daeLjMjWdXdOj(h3j4jbe5j6j7j8jZd9j!j#jpeqebkck1d2dek-htkukrevkwkxkyk4dzkAkBkFeGe2k3k6d7d5k=h-k.kHe/k:k;k=k9d?k@k[kVeWesltl#d$dvl^hKlLlXeMlNlOlPl'dQlRlSl#e$e,l-l)d*d/l}hambm%ecmdmemfm,dgmhmim@e[eJmKm.d/dMmdi1m2m]e3m4m5m6m;d7m8m9mgfhf~man?d@dcniirnsniftnunvnwn]dxnynzn

172 

173 return EnvironmentVariableResponse.model_validate(response.json()) 2LjMjOj(h3j4j5j6j7j8j9j!j#jbkckek-htkukvkwkxkykzkAkBk2k3k5k=h-k.k/k:k;k=k?k@k[ksltlvl^hKlLlMlNlOlPlQlRlSl,l-l/l}hambmcmdmemfmgmhmimJmKmMmdi1m2m3m4m5m6m7m8m9m~mancniirnsntnunvnwnxnynzn

174 

175 def get_custom_domains(self, *, app_id: str) -> CustomDomainsAPIResponse: 1aebfcdg

176 response = self.get(f"/apps/{app_id}/custom-domains") 2pjqjrjsjtjujvjwjxjyjzj|drfAjBjjiCjkiDjliEj#hFj$hId%h)j*j+j,j-j.j/j:j;j=j?jneGf@j[jni]joi^jpi_j)h`j*hKd+hGkHkIkJkKkLkMkNkOkPkQkDeVfRkSkriTksiUktiVk.hWk/hMd:h{k|k}k~kalblcldlelflglTe!fhlilvijlwiklxill?hml@hOd[hXlYlZl0l1l2l3l4l5l6l7l9e=f8l9lzi!lAi#lBi$l_h%l`hQd{hnmompmqmrmsmtmumvmwmxm=edgymzmDiAmEiBmFiCm~hDmaiSdbi'm(m)m*m+m,m-m.m/m:m;mefsg=m?mHi@mIi[mJi]mei^mfiUdgi

177 response.raise_for_status() 2pjqjrjsjtjujvjwjxjyjzj|dAjBjjiCjkiDjliEj#hFj$hId%h)j*j+j,j-j.j/j:j;j=j?jne@j[jni]joi^jpi_j)h`j*hKd+hGkHkIkJkKkLkMkNkOkPkQkDeRkSkriTksiUktiVk.hWk/hMd:h{k|k}k~kalblcldlelflglTehlilvijlwiklxill?hml@hOd[hXlYlZl0l1l2l3l4l5l6l7l9e8l9lzi!lAi#lBi$l_h%l`hQd{hnmompmqmrmsmtmumvmwmxm=eymzmDiAmEiBmFiCm~hDmaiSdbi'm(m)m*m+m,m-m.m/m:m;mef=m?mHi@mIi[mJi]mei^mfiUdgi

178 

179 return CustomDomainsAPIResponse.model_validate(response.json()) 2pjqjrjsjtjujvjwjxjyjzjAjBjjiCjkiDjliEj#hFj$hId%h)j*j+j,j-j.j/j:j;j=j?j@j[jni]joi^jpi_j)h`j*hKd+hGkHkIkJkKkLkMkNkOkPkQkRkSkriTksiUktiVk.hWk/hMd:h{k|k}k~kalblcldlelflglhlilvijlwiklxill?hml@hOd[hXlYlZl0l1l2l3l4l5l6l7l8l9lzi!lAi#lBi$l_h%l`hQd{hnmompmqmrmsmtmumvmwmxmymzmDiAmEiBmFiCm~hDmaiSdbi'm(m)m*m+m,m-m.m/m:m;m=m?mHi@mIi[mJi]mei^mfiUdgi

180 

181 def create_custom_domain( 1aebfcdg

182 self, 

183 *, 

184 app_id: str, 

185 name: str, 

186 is_using_pre_validation: bool, 

187 ) -> CustomDomain: 

188 response = self.post( 2ljmj_d`d{dnjoj$j%jkeleme'j(jCkDkAeBeCeEkFk]k^kQeReSe_k`kTlUl6e7e8eVlWljmkm/e:e;elmmm!m#mbfcfdf$m%m

189 f"/apps/{app_id}/custom-domains", 

190 json={ 

191 "name": name, 

192 "is_using_pre_validation": is_using_pre_validation, 

193 }, 

194 ) 

195 response.raise_for_status() 2ljmj_d`d{dnjoj$j%jkeleme'j(jCkDkAeBeCeEkFk]k^kQeReSe_k`kTlUl6e7e8eVlWljmkm/e:e;elmmm!m#mbfcfdf$m%m

196 

197 return CustomDomain.model_validate(response.json()) 2ljmjnjoj$j%j'j(jCkDkEkFk]k^k_k`kTlUlVlWljmkmlmmm!m#m$m%m

198 

199 def remove_custom_domain(self, *, app_id: str, domain_id: str) -> None: 1aebfcdg

200 response = self.delete(f"/apps/{app_id}/custom-domains/{domain_id}") 2jikilinioipirisitiviwixiziAiBiDiEiFiHiIiJi

201 response.raise_for_status() 2jikilinioipirisitiviwixiziAiBiDiEiFiHiIiJi

202 

203 def restart_custom_domain_setup( 1aebfcdg

204 self, 

205 *, 

206 app_id: str, 

207 domain_id: str, 

208 ) -> CustomDomain: 

209 response = self.post(f"/apps/{app_id}/custom-domains/{domain_id}/restart-setup") 2#h$hId%h)h*hKd+h.h/hMd:h?h@hOd[h_h`hQd{h~haiSdbieifiUdgi

210 response.raise_for_status() 2#h$hId%h)h*hKd+h.h/hMd:h?h@hOd[h_h`hQd{h~haiSdbieifiUdgi

211 

212 return CustomDomain.model_validate(response.json()) 2#h$h%h)h*h+h.h/h:h?h@h[h_h`h{h~haibieifigi

213 

214 @attempts(STREAM_LOGS_MAX_RETRIES, STREAM_LOGS_TIMEOUT) 1aebfcdg

215 def stream_build_logs( 1aebfcdg

216 self, deployment_id: str, *, follow: bool = True 

217 ) -> Generator[BuildLogLine, None, None]: 

218 last_id = None 2.ALiQhMi%i'iRh}A(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i NgudQ R S T vd=c@b[b?c]b^b}d_b`b{b|b}b~bacbc/APiThQi+i,iUh~A-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k 1gwd8 9 ! # xd^cccdc_cecfcoegchcicjckclcmcnc:ATiWhUi:i;iXhaB=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m (gyd? @ [ ] zd}cocpc~cqcrcEesctcucvcwcxcyczc;AXiZhYi[i]i0hbB^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o ]gAdhbibjbkbBdddAcBcedCcDcUeEcFcGcHcIcJcKcLc=A1i2h2i{i|i3hcB}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q ghCdzbAbBbCbDdidMcNcjdOcPc!eQcRcScTcUcVcWcXc?A5i5h6ibjcj6hdBdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s uhEdRbSbTbUbFdndYcZcod0c1c?e2c3c4c5c6c7c8c9c@A9i8h!igjhj9heBij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u IhGd9b!b#b$bHdsd!c#ctd$c%cff'c(c)c*c+c,c-c.c

219 

220 while True: 2.ALiQhMi%i'iRh}A(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i NgudQ R S T vd=c@b[b?c]b^b}d_b`b{b|b}b~bacbc/APiThQi+i,iUh~A-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k 1gwd8 9 ! # xd^cccdc_cecfcoegchcicjckclcmcnc:ATiWhUi:i;iXhaB=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m (gyd? @ [ ] zd}cocpc~cqcrcEesctcucvcwcxcyczc;AXiZhYi[i]i0hbB^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o ]gAdhbibjbkbBdddAcBcedCcDcUeEcFcGcHcIcJcKcLc=A1i2h2i{i|i3hcB}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q ghCdzbAbBbCbDdidMcNcjdOcPc!eQcRcScTcUcVcWcXc?A5i5h6ibjcj6hdBdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s uhEdRbSbTbUbFdndYcZcod0c1c?e2c3c4c5c6c7c8c9c@A9i8h!igjhj9heBij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u IhGd9b!b#b$bHdsd!c#ctd$c%cff'c(c)c*c+c,c-c.c

221 params = {"last_id": last_id} if last_id else None 2.ALiQhMi%i'iRh}A(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i NgudQ R S T vd=c@b[b?c]b^b}d_b`b{b|b}b~bacbc/APiThQi+i,iUh~A-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k 1gwd8 9 ! # xd^cccdc_cecfcoegchcicjckclcmcnc:ATiWhUi:i;iXhaB=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m (gyd? @ [ ] zd}cocpc~cqcrcEesctcucvcwcxcyczc;AXiZhYi[i]i0hbB^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o ]gAdhbibjbkbBdddAcBcedCcDcUeEcFcGcHcIcJcKcLc=A1i2h2i{i|i3hcB}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q ghCdzbAbBbCbDdidMcNcjdOcPc!eQcRcScTcUcVcWcXc?A5i5h6ibjcj6hdBdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s uhEdRbSbTbUbFdndYcZcod0c1c?e2c3c4c5c6c7c8c9c@A9i8h!igjhj9heBij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u IhGd9b!b#b$bHdsd!c#ctd$c%cff'c(c)c*c+c,c-c.c

222 

223 with self.stream( 2a .ALiQhMi%i'iRh}A(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i NgudQ R S T vd=c@b[b?c]b^b}d_b`b{b|b}b~bacbce /APiThQi+i,iUh~A-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k 1gwd8 9 ! # xd^cccdc_cecfcoegchcicjckclcmcncb :ATiWhUi:i;iXhaB=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m (gyd? @ [ ] zd}cocpc~cqcrcEesctcucvcwcxcyczcf ;AXiZhYi[i]i0hbB^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o ]gAdhbibjbkbBdddAcBcedCcDcUeEcFcGcHcIcJcKcLcc =A1i2h2i{i|i3hcB}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q ghCdzbAbBbCbDdidMcNcjdOcPc!eQcRcScTcUcVcWcXcd ?A5i5h6ibjcj6hdBdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s uhEdRbSbTbUbFdndYcZcod0c1c?e2c3c4c5c6c7c8c9cg @A9i8h!igjhj9heBij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u IhGd9b!b#b$bHdsd!c#ctd$c%cff'c(c)c*c+c,c-c.c

224 "GET", 

225 f"/deployments/{deployment_id}/build-logs", 

226 timeout=60, 

227 params=params, 

228 ) as response: 

229 if response.is_error: 2.ALiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i NgudQ R S T vd=c@b[b?c]b^b}d_b`b{b|b}b~bacbc/APiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k 1gwd8 9 ! # xd^cccdc_cecfcoegchcicjckclcmcnc:ATiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m (gyd? @ [ ] zd}cocpc~cqcrcEesctcucvcwcxcyczc;AXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o ]gAdhbibjbkbBdddAcBcedCcDcUeEcFcGcHcIcJcKcLc=A1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q ghCdzbAbBbCbDdidMcNcjdOcPc!eQcRcScTcUcVcWcXc?A5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s uhEdRbSbTbUbFdndYcZcod0c1c?e2c3c4c5c6c7c8c9c@A9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u IhGd9b!b#b$bHdsd!c#ctd$c%cff'c(c)c*c+c,c-c.c

230 # Load the body while the stream is open so error handlers 

231 # can surface the server's error detail. 

232 response.read() 2.AAnNg/ABn1g:ACn(g;ADn]g=AEngh?AFnuh@AGnIh

233 response.raise_for_status() 2.ALiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i NgudQ R S T vd=c@b[b?c]b^b}d_b`b{b|b}b~bacbc/APiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k 1gwd8 9 ! # xd^cccdc_cecfcoegchcicjckclcmcnc:ATiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m (gyd? @ [ ] zd}cocpc~cqcrcEesctcucvcwcxcyczc;AXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o ]gAdhbibjbkbBdddAcBcedCcDcUeEcFcGcHcIcJcKcLc=A1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q ghCdzbAbBbCbDdidMcNcjdOcPc!eQcRcScTcUcVcWcXc?A5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s uhEdRbSbTbUbFdndYcZcod0c1c?e2c3c4c5c6c7c8c9c@A9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u IhGd9b!b#b$bHdsd!c#ctd$c%cff'c(c)c*c+c,c-c.c

234 

235 for line in response.iter_lines(): 2LiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i udQ R S T vd=c@b[b?c]b^b}d_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k wd8 9 ! # xd^cccdc_cecfcoegchcicjckclcmcncTiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m yd? @ [ ] zd}cocpc~cqcrcEesctcucvcwcxcyczcXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o AdhbibjbkbBdddAcBcedCcDcUeEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q CdzbAbBbCbDdidMcNcjdOcPc!eQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s EdRbSbTbUbFdndYcZcod0c1c?e2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u Gd9b!b#b$bHdsd!c#ctd$c%cff'c(c)c*c+c,c-c.c

236 if not line or not line.strip(): 2LiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i udQ R S T vd=c@b[b?c]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k wd8 9 ! # xd^cccdc_cecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m yd? @ [ ] zd}cocpc~cqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o AdhbibjbkbBdddAcBcedCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q CdzbAbBbCbDdidMcNcjdOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s EdRbSbTbUbFdndYcZcod0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u Gd9b!b#b$bHdsd!c#ctd$c%c'c(c)c*c+c,c-c.c

237 continue 2MiQiUiYi2i6i!i

238 

239 if log_line := self._parse_log_line(line): 2LiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i udQ R S T vd=c@b[b?c]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k wd8 9 ! # xd^cccdc_cecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m yd? @ [ ] zd}cocpc~cqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o AdhbibjbkbBdddAcBcedCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q CdzbAbBbCbDdidMcNcjdOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s EdRbSbTbUbFdndYcZcod0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u Gd9b!b#b$bHdsd!c#ctd$c%c'c(c)c*c+c,c-c.c

240 if log_line.id: 2LiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i udQ R S T vd=c@b[b?c]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k wd8 9 ! # xd^cccdc_cecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m yd? @ [ ] zd}cocpc~cqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o AdhbibjbkbBdddAcBcedCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q CdzbAbBbCbDdidMcNcjdOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s EdRbSbTbUbFdndYcZcod0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u Gd9b!b#b$bHdsd!c#ctd$c%c'c(c)c*c+c,c-c.c

241 last_id = log_line.id 2LiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i Q R S T vd@b[b]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k 8 9 ! # xdccdcecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m ? @ [ ] zdocpcqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o hbibjbkbBdAcBcCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q zbAbBbCbDdMcNcOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s RbSbTbUbFdYcZc0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u 9b!b#b$bHd!c#c$c%c'c(c)c*c+c,c-c.c

242 

243 if log_line.type == "message": 2LiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i udQ R S T vd=c@b[b?c]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k wd8 9 ! # xd^cccdc_cecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m yd? @ [ ] zd}cocpc~cqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o AdhbibjbkbBdddAcBcedCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q CdzbAbBbCbDdidMcNcjdOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s EdRbSbTbUbFdndYcZcod0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u Gd9b!b#b$bHdsd!c#ctd$c%c'c(c)c*c+c,c-c.c

244 yield log_line 2LiQhMi%i'iRh(iNiOi)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i Q R S T @b[b]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSi.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k 8 9 ! # ccdcecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWi?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m ? @ [ ] ocpcqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0i_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o hbibjbkbAcBcCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4i~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q zbAbBbCbMcNcOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s RbSbTbUbYcZc0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$ijjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u 9b!b#b$b!c#c$c%c'c(c)c*c+c,c-c.c

245 

246 if log_line.type in ("complete", "failed"): 2LiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i udQ R S T vd=c@b[b?c]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k wd8 9 ! # xd^cccdc_cecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m yd? @ [ ] zd}cocpc~cqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o AdhbibjbkbBdddAcBcedCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q CdzbAbBbCbDdidMcNcjdOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s EdRbSbTbUbFdndYcZcod0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u Gd9b!b#b$bHdsd!c#ctd$c%c'c(c)c*c+c,c-c.c

247 yield log_line 2QhMi%i'iRh(iAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i udQ R S T vd@b[b^b_b`b{b|b}b~bacbcThQi+i,iUh-iBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k wd8 9 ! # xdccdcfcgchcicjckclcmcncWhUi:i;iXh=iCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m yd? @ [ ] zdocpcrcsctcucvcwcxcyczcZhYi[i]i0h^iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o AdhbibjbkbBdAcBcDcEcFcGcHcIcJcKcLc2h2i{i|i3h}iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q CdzbAbBbCbDdMcNcPcQcRcScTcUcVcWcXc5h6ibjcj6hdjFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s EdRbSbTbUbFdYcZc1c2c3c4c5c6c7c8c9c8h!igjhj9hijGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u Gd9b!b#b$bHd!c#c%c'c(c)c*c+c,c-c.c

248 return 2Mi%i'iRh(iAn)i*iShvd@b[b^b_b`b{b|b}b~bacbcQi+i,iUh-iBn.i/iVhxdccdcfcgchcicjckclcmcncUi:i;iXh=iCn?i@iYhzdocpcrcsctcucvcwcxcyczcYi[i]i0h^iDn_i`i1hBdAcBcDcEcFcGcHcIcJcKcLc2i{i|i3h}iEn~iaj4hDdMcNcPcQcRcScTcUcVcWcXc6ibjcj6hdjFnejfj7hFdYcZc1c2c3c4c5c6c7c8c9c!igjhj9hijGnjjkj!hHd!c#c%c'c(c)c*c+c,c-c.c

249 

250 if log_line.type == "timeout": 2LiQhMi%i'iRh(iNiOi)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i Q R S T =c@b[b?c]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSi.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k 8 9 ! # ^cccdc_cecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWi?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m ? @ [ ] }cocpc~cqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0i_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o hbibjbkbddAcBcedCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4i~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q zbAbBbCbidMcNcjdOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s RbSbTbUbndYcZcod0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$ijjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u 9b!b#b$bsd!c#ctd$c%c'c(c)c*c+c,c-c.c

251 logger.debug("Received timeout; reconnecting") 2QhNih i =c?cThRij k ^c_cWhVil m }c~cZhZin o dded2h3ip q idjd5h7ir s ndod8h#it u sdtd

252 if not follow: 2QhNih i =c?cThRij k ^c_cWhVil m }c~cZhZin o dded2h3ip q idjd5h7ir s ndod8h#it u sdtd

253 return 2Ni=c?cRi^c_cVi}c~cZidded3iidjd7indod#isdtd

254 break # Breaks for loop to reconnect 2Qhh i Thj k Whl m Zhn o 2hp q 5hr s 8ht u

255 else: 

256 if not follow: 2LiOi]b}dPiSiecoeTiWiqcEeXi0iCcUe1i4iOc!e5i8i0c?e9i$i$cff

257 return 2]b}decoeqcEeCcUeOc!e0c?e$cff

258 

259 logger.debug("Connection closed by server unexpectedly; will retry") 2LiOiPiSiTiWiXi0i1i4i5i8i9i$i

260 

261 raise httpx.NetworkError("Connection closed without terminal state") 2LiOiPiSiTiWiXi0i1i4i5i8i9i$i

262 

263 time.sleep(0.5) 2Qhh i Thj k Whl m Zhn o 2hp q 5hr s 8ht u

264 

265 def _parse_log_line(self, line: str) -> BuildLogLine | None: 1aebfcdg

266 try: 2LiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i udQ R S T vd=c@b[b?c]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k wd8 9 ! # xd^cccdc_cecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m yd? @ [ ] zd}cocpc~cqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o AdhbibjbkbBdddAcBcedCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q CdzbAbBbCbDdidMcNcjdOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s EdRbSbTbUbFdndYcZcod0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u Gd9b!b#b$bHdsd!c#ctd$c%c'c(c)c*c+c,c-c.c

267 return BuildLogAdapter.validate_json(line) 2LiQhMi%i'iRh(iNiOiAn)i*iSh/cC D %bE F G H :cI J K 'bL M N O P h ;cv i udQ R S T vd=c@b[b?c]b^b_b`b{b|b}b~bacbcPiThQi+i,iUh-iRiSiBn.i/iVh@cU V (bW X Y Z [c0 1 2 )b3 4 5 6 7 j ]cw k wd8 9 ! # xd^cccdc_cecfcgchcicjckclcmcncTiWhUi:i;iXh=iViWiCn?i@iYh`c$ % *b' ( ) * {c+ , - +b. / : ; = l |cx m yd? @ [ ] zd}cocpc~cqcrcsctcucvcwcxcyczcXiZhYi[i]i0h^iZi0iDn_i`i1had^ _ ,b` { | } bd~ abbb-bcbdbebfbgbn cdy o AdhbibjbkbBdddAcBcedCcDcEcFcGcHcIcJcKcLc1i2h2i{i|i3h}i3i4iEn~iaj4hfdlbmb.bnbobpbqbgdrbsbtb/bubvbwbxbybp hdz q CdzbAbBbCbDdidMcNcjdOcPcQcRcScTcUcVcWcXc5i5h6ibjcj6hdj7i8iFnejfj7hkdDbEb:bFbGbHbIbldJbKbLb;bMbNbObPbQbr mdA s EdRbSbTbUbFdndYcZcod0c1c2c3c4c5c6c7c8c9c9i8h!igjhj9hij#i$iGnjjkj!hpdVbWb=bXbYbZb0bqd1b2b3b?b4b5b6b7b8bt rdB u Gd9b!b#b$bHdsd!c#ctd$c%c'c(c)c*c+c,c-c.c

268 except (ValidationError, json.JSONDecodeError) as e: 2RhShUhVhXhYh0h1h3h4h6h7h9h!h

269 logger.debug("Skipping malformed log: %s (error: %s)", line[:100], e) 2RhShUhVhXhYh0h1h3h4h6h7h9h!h

270 return None 2RhShUhVhXhYh0h1h3h4h6h7h9h!h

271 

272 @attempts(STREAM_LOGS_MAX_RETRIES, STREAM_LOGS_TIMEOUT) 1aebfcdg

273 def stream_app_logs( 1aebfcdg

274 self, 

275 app_id: str, 

276 tail: int, 

277 since: str, 

278 follow: bool, 

279 ) -> Generator[AppLogEntry, None, None]: 

280 timeout = 120 if follow else 30 2NncedeeefegeheOnPnQnRnSnFfieTnUnVn0dJdje2nseteuevewexe3n4n5n6n7nUfye8n9n!n5dLdze*nIeJeKeLeMeNe+n,n-n.n/n9fOe:n;n=n!dNdPe`nYeZe0e1e2e3e{n|n}n~nao;f4ebocodo(dPd5eko'e(e)e*e+e,elomonooopocg-eqoroso-dRd.ezo^e_e`e{e|e}eAoBoCoDoEorg~eFoGoHo=dTdafOojfkflfmfnfofPoQoRoSoToGgpfUoVoWo^dVdqf

281 with self.stream( 2NncedeeefegeheOnPnQnRnSnFfieTnUnVn0dJdje2nseteuevewexe3n4n5n6n7nUfye8n9n!n5dLdze*nIeJeKeLeMeNe+n,n-n.n/n9fOe:n;n=n!dNdPe`nYeZe0e1e2e3e{n|n}n~nao;f4ebocodo(dPd5eko'e(e)e*e+e,elomonooopocg-eqoroso-dRd.ezo^e_e`e{e|e}eAoBoCoDoEorg~eFoGoHo=dTdafOojfkflfmfnfofPoQoRoSoToGgpfUoVoWo^dVdqf

282 "GET", 

283 f"/apps/{app_id}/logs/stream", 

284 params={ 

285 "tail": tail, 

286 "since": since, 

287 "follow": follow, 

288 }, 

289 timeout=timeout, 

290 ) as response: 

291 if response.is_error: 2NncedeeefegeheOnPnQnRnSnFfieTnUnVn0dJdje2nseteuevewexe3n4n5n6n7nUfye8n9n!n5dLdze*nIeJeKeLeMeNe+n,n-n.n/n9fOe:n;n=n!dNdPe`nYeZe0e1e2e3e{n|n}n~nao;f4ebocodo(dPd5eko'e(e)e*e+e,elomonooopocg-eqoroso-dRd.ezo^e_e`e{e|e}eAoBoCoDoEorg~eFoGoHo=dTdafOojfkflfmfnfofPoQoRoSoToGgpfUoVoWo^dVdqf

292 # Load the body while the stream is open so error handlers 

293 # can surface the server's error detail. 

294 response.read() 2OnPnQnRnSn3n4n5n6n7n+n,n-n.n/n{n|n}n~naolomonooopoAoBoCoDoEoPoQoRoSoTo

295 response.raise_for_status() 2NncedeeefegeheOnPnQnRnSnFfieTnUnVn0dJdje2nseteuevewexe3n4n5n6n7nUfye8n9n!n5dLdze*nIeJeKeLeMeNe+n,n-n.n/n9fOe:n;n=n!dNdPe`nYeZe0e1e2e3e{n|n}n~nao;f4ebocodo(dPd5eko'e(e)e*e+e,elomonooopocg-eqoroso-dRd.ezo^e_e`e{e|e}eAoBoCoDoEorg~eFoGoHo=dTdafOojfkflfmfnfofPoQoRoSoToGgpfUoVoWo^dVdqf

296 for line in response.iter_lines(): 2NncedeeefegeheFfieTnUnVn0dJdje2nseteuevewexeUfye8n9n!n5dLdze*nIeJeKeLeMeNe9fOe:n;n=n!dNdPe`nYeZe0e1e2e3e;f4ebocodo(dPd5eko'e(e)e*e+e,ecg-eqoroso-dRd.ezo^e_e`e{e|e}erg~eFoGoHo=dTdafOojfkflfmfnfofGgpfUoVoWo^dVdqf

297 if not line or not line.strip(): # pragma: no cover 2cedeeefegeheFfie0dJdjeseteuevewexeUfye5dLdzeIeJeKeLeMeNe9fOe!dNdPeYeZe0e1e2e3e;f4e(dPd5e'e(e)e*e+e,ecg-e-dRd.e^e_e`e{e|e}erg~e=dTdafjfkflfmfnfofGgpf^dVdqf

298 continue 

299 try: 2cedeeefegeheFfie0dJdjeseteuevewexeUfye5dLdzeIeJeKeLeMeNe9fOe!dNdPeYeZe0e1e2e3e;f4e(dPd5e'e(e)e*e+e,ecg-e-dRd.e^e_e`e{e|e}erg~e=dTdafjfkflfmfnfofGgpf^dVdqf

300 data = json.loads(line) 2cedeeefegeheFfie0dJdjeseteuevewexeUfye5dLdzeIeJeKeLeMeNe9fOe!dNdPeYeZe0e1e2e3e;f4e(dPd5e'e(e)e*e+e,ecg-e-dRd.e^e_e`e{e|e}erg~e=dTdafjfkflfmfnfofGgpf^dVdqf

301 except json.JSONDecodeError: 2JdLdNdPdRdTdVd

302 logger.debug("Failed to parse log line: %s", line) 2JdLdNdPdRdTdVd

303 continue 2JdLdNdPdRdTdVd

304 

305 if data.get("type") == "heartbeat": 2cedeeefegeheFfie0dJdjeseteuevewexeUfye5dLdzeIeJeKeLeMeNe9fOe!dNdPeYeZe0e1e2e3e;f4e(dPd5e'e(e)e*e+e,ecg-e-dRd.e^e_e`e{e|e}erg~e=dTdafjfkflfmfnfofGgpf^dVdqf

306 continue 20d5d!d(d-d=d^d

307 

308 if data.get("type") == "error": 2cedeeefegeheFfie0dJdjeseteuevewexeUfye5dLdzeIeJeKeLeMeNe9fOe!dNdPeYeZe0e1e2e3e;f4e(dPd5e'e(e)e*e+e,ecg-e-dRd.e^e_e`e{e|e}erg~e=dTdafjfkflfmfnfofGgpf^dVdqf

309 raise StreamLogError(data.get("message", "Unknown error")) 2FfUf9f;fcgrgGg

310 

311 try: 2cedeeefegeheie0dJdjeseteuevewexeye5dLdzeIeJeKeLeMeNeOe!dNdPeYeZe0e1e2e3e4e(dPd5e'e(e)e*e+e,e-e-dRd.e^e_e`e{e|e}e~e=dTdafjfkflfmfnfofpf^dVdqf

312 yield AppLogEntry.model_validate(data) 2cedeeefegeheie0dJdjeseteuevewexeye5dLdzeIeJeKeLeMeNeOe!dNdPeYeZe0e1e2e3e4e(dPd5e'e(e)e*e+e,e-e-dRd.e^e_e`e{e|e}e~e=dTdafjfkflfmfnfofpf^dVdqf

313 except ValidationError as e: # pragma: no cover 

314 logger.debug("Failed to parse log entry: %s - %s", data, e) 

315 continue 

316 

317 def poll_deployment_status( 1aebfcdg

318 self, 

319 deployment_id: str, 

320 ) -> DeploymentStatus: 

321 start = time.monotonic() 2;y'A=y[AC D E F G H I J K L M N O P h v i Q R S T ?y(A@y]AU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y)A]y^A$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y*A_y_A^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y+A{y`Albmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y,A}y{ADbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~y-Aaz|AVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

322 error_count = 0 2;y'A=y[AC D E F G H I J K L M N O P h v i Q R S T ?y(A@y]AU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y)A]y^A$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y*A_y_A^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y+A{y`Albmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y,A}y{ADbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~y-Aaz|AVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

323 

324 while True: 2;y'A=y[AC D E F G H I J K L M N O P h v i Q R S T ?y(A@y]AU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y)A]y^A$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y*A_y_A^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y+A{y`Albmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y,A}y{ADbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~y-Aaz|AVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

325 if time.monotonic() - start > POLL_TIMEOUT.total_seconds(): 2;y'A=y[AC D E F G H I J K L M N O P h v i Q R S T ?y(A@y]AU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y)A]y^A$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y*A_y_A^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y+A{y`Albmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y,A}y{ADbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~y-Aaz|AVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

326 raise TimeoutError("Deployment verification timed out") 2[A]A^A_A`A{A|A

327 

328 with attempt(error_count): 2;y'A=yC D E F G H I J K L M N O P h v i Q R S T ?y(A@yU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y)A]y$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y*A_y^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y+A{ylbmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y,A}yDbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~y-AazVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

329 response = self.get(f"/deployments/{deployment_id}") 2;y'A=yC D E F G H I J K L M N O P h v i Q R S T ?y(A@yU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y)A]y$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y*A_y^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y+A{ylbmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y,A}yDbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~y-AazVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

330 response.raise_for_status() 2;y'A=yC D E F G H I J K L M N O P h v i Q R S T ?y(A@yU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y)A]y$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y*A_y^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y+A{ylbmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y,A}yDbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~y-AazVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

331 status = DeploymentStatus(response.json()["status"]) 2;y=yC D E F G H I J K L M N O P h v i Q R S T ?y@yU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y]y$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y_y^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y{ylbmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y}yDbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~yazVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

332 error_count = 0 2;y=yC D E F G H I J K L M N O P h v i Q R S T ?y@yU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y]y$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y_y^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y{ylbmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y}yDbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~yazVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

333 

334 if status in TERMINAL_STATUSES: 2;y=yC D E F G H I J K L M N O P h v i Q R S T ?y@yU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y]y$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y_y^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y{ylbmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y}yDbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~yazVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

335 return status 2;y=yC D E F G H I J K L M N O P h v i Q R S T ?y@yU V W X Y Z 0 1 2 3 4 5 6 7 j w k 8 9 ! # [y]y$ % ' ( ) * + , - . / : ; = l x m ? @ [ ] ^y_y^ _ ` { | } ~ abbbcbdbebfbgbn y o hbibjbkb`y{ylbmbnbobpbqbrbsbtbubvbwbxbybp z q zbAbBbCb|y}yDbEbFbGbHbIbJbKbLbMbNbObPbQbr A s RbSbTbUb~yazVbWbXbYbZb0b1b2b3b4b5b6b7b8bt B u 9b!b#b$b

336 

337 time.sleep(POLL_INTERVAL) 2;yv ?yw [yx ^yy `yz |yA ~yB

338 continue 2;yv ?yw [yx ^yy `yz |yA ~yB

339 

340 error_count += 1 2'A=y(A@y)A]y*A_y+A{y,A}y-Aaz

341 if error_count >= POLL_MAX_RETRIES: 2'A=y(A@y)A]y*A_y+A{y,A}y-Aaz

342 raise TooManyRetriesError( 2'A(A)A*A+A,A-A

343 f"Failed after {POLL_MAX_RETRIES} attempts polling deployment status" 

344 )