Coverage for src/fastapi_cloud_cli/utils/apps.py: 100%

40 statements  

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

1import logging 2ecfcgchcicjckc

2from pathlib import Path 2ecfcgchcicjckc

3from typing import TYPE_CHECKING 2ecfcgchcicjckc

4 

5from pydantic import BaseModel 2ecfcgchcicjckc

6 

7if TYPE_CHECKING: 2ecfcgchcicjckc

8 from fastapi_cloud_cli.utils.cli import FastAPIRichToolkit 

9 

10logger = logging.getLogger("fastapi_cli") 2ecfcgchcicjckc

11 

12 

13class AppConfig(BaseModel): 2ecfcgchcicjckc

14 app_id: str 2ecfcgchcicjckc

15 team_id: str 2ecfcgchcicjckc

16 

17 

18def get_app_config(path_to_deploy: Path) -> AppConfig | None: 2ecfcgchcicjckc

19 config_path = path_to_deploy / ".fastapicloud/cloud.json" 2lcmcljmjnjC nca b c ocpcd qcrcD ojE scpjqjF rjsjG H I tjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjJ K L SjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(jM )j*j+j,j-j.jtcucvcwcN O P Q R S /j:j;j=j?jT xcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfd|i}igdhd@j[j]jU ide f g jdkdh ldmdV ^jW nd_j`jX {j|jY Z 0 }j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwk1 2 3 xkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUk4 VkWkXkYkZk0kodpdqdrd5 6 7 8 9 ! 1k2k3k4k5k# sdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dae~iajbece6k7k8k$ dei j k eefel gehe% 9k' ie!k#k( $k%k) * + 'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalbl, - . cldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzl/ AlBlClDlElFljekeleme: ; = ? @ [ GlHlIlJlKl] neoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`ebjcj{e|eLlMlNl^ }em n o ~eafp bfcf_ Ol` dfPlQl{ RlSl| } ~ TlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*labbbcb+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemdbfmgmhmimjmkmefffgfhfebfbgbhbibjblmmmnmompmkbifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@fdjej[f]fqmrmsmlb^fq r s _f`ft {f|fmbtmnb}fumvmobwmxmpbqbrbymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmsbtbubXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-mvb.m/m:m;m=m?m~fagbgcgwbxbybzbAbBb@m[m]m^m_mCbdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/gfjgj:g;g`m{m|mDb=gu v w ?g@gx [g]gEb}mFb^g~manGbbncnHbIbJbdnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnKbLbMbCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZnNb0n1n2n3n4n5n_g`g{g|gObPbQbRbSbTb6n7n8n9n!nUb}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*hhjij+h,h#n$n%nVb-hy z A .h/hB :h;hWb'nXb=h(n)nYb*n+nZb0b1b,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogo2b3b4bhoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEo5bFoGoHoIoJoKo?h@h[h]h6b7b8b9b!b#bLoMoNoOoPo$b^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$ijjkj

20 logger.debug("Looking for app config at: %s", config_path) 2lcmcljmjnjC nca b c ocpcd qcrcD ojE scpjqjF rjsjG H I tjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjJ K L SjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(jM )j*j+j,j-j.jtcucvcwcN O P Q R S /j:j;j=j?jT xcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfd|i}igdhd@j[j]jU ide f g jdkdh ldmdV ^jW nd_j`jX {j|jY Z 0 }j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwk1 2 3 xkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUk4 VkWkXkYkZk0kodpdqdrd5 6 7 8 9 ! 1k2k3k4k5k# sdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dae~iajbece6k7k8k$ dei j k eefel gehe% 9k' ie!k#k( $k%k) * + 'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalbl, - . cldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzl/ AlBlClDlElFljekeleme: ; = ? @ [ GlHlIlJlKl] neoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`ebjcj{e|eLlMlNl^ }em n o ~eafp bfcf_ Ol` dfPlQl{ RlSl| } ~ TlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*labbbcb+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemdbfmgmhmimjmkmefffgfhfebfbgbhbibjblmmmnmompmkbifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@fdjej[f]fqmrmsmlb^fq r s _f`ft {f|fmbtmnb}fumvmobwmxmpbqbrbymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmsbtbubXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-mvb.m/m:m;m=m?m~fagbgcgwbxbybzbAbBb@m[m]m^m_mCbdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/gfjgj:g;g`m{m|mDb=gu v w ?g@gx [g]gEb}mFb^g~manGbbncnHbIbJbdnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnKbLbMbCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZnNb0n1n2n3n4n5n_g`g{g|gObPbQbRbSbTb6n7n8n9n!nUb}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*hhjij+h,h#n$n%nVb-hy z A .h/hB :h;hWb'nXb=h(n)nYb*n+nZb0b1b,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogo2b3b4bhoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEo5bFoGoHoIoJoKo?h@h[h]h6b7b8b9b!b#bLoMoNoOoPo$b^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$ijjkj

21 

22 if not config_path.exists(): 2lcmcljmjnjC nca b c ocpcd qcrcD ojE scpjqjF rjsjG H I tjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjJ K L SjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(jM )j*j+j,j-j.jtcucvcwcN O P Q R S /j:j;j=j?jT xcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfd|i}igdhd@j[j]jU ide f g jdkdh ldmdV ^jW nd_j`jX {j|jY Z 0 }j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwk1 2 3 xkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUk4 VkWkXkYkZk0kodpdqdrd5 6 7 8 9 ! 1k2k3k4k5k# sdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dae~iajbece6k7k8k$ dei j k eefel gehe% 9k' ie!k#k( $k%k) * + 'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalbl, - . cldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzl/ AlBlClDlElFljekeleme: ; = ? @ [ GlHlIlJlKl] neoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`ebjcj{e|eLlMlNl^ }em n o ~eafp bfcf_ Ol` dfPlQl{ RlSl| } ~ TlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*labbbcb+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemdbfmgmhmimjmkmefffgfhfebfbgbhbibjblmmmnmompmkbifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@fdjej[f]fqmrmsmlb^fq r s _f`ft {f|fmbtmnb}fumvmobwmxmpbqbrbymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmsbtbubXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-mvb.m/m:m;m=m?m~fagbgcgwbxbybzbAbBb@m[m]m^m_mCbdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/gfjgj:g;g`m{m|mDb=gu v w ?g@gx [g]gEb}mFb^g~manGbbncnHbIbJbdnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnKbLbMbCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZnNb0n1n2n3n4n5n_g`g{g|gObPbQbRbSbTb6n7n8n9n!nUb}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*hhjij+h,h#n$n%nVb-hy z A .h/hB :h;hWb'nXb=h(n)nYb*n+nZb0b1b,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogo2b3b4bhoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEo5bFoGoHoIoJoKo?h@h[h]h6b7b8b9b!b#bLoMoNoOoPo$b^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$ijjkj

23 logger.debug("App config file doesn't exist") 2lcljmjnjncocpcrcE pjF sjG H I AjDjFjLjMjNjJ K L UjVjWj6j#j$j%j'j(jM *j+j,jucwcN O P Q R S :j;j=j?jT QcUcWcXcYc7c9c,cbd|igd@j[j]jidjdkdmdW _jX |jY Z 0 fkikkkqkrksk1 2 3 zkAkBkLkQkRkSkTkUk4 WkXkYkpdrd5 6 7 8 9 ! 2k3k4k5k# LdPdRdSdTd2d4d'd{d~ibe6k7k8kdeeefehe' !k( %k) * + .k;k?k`k{k|k, - . elflglqlvlwlxlylzl/ BlClDlkeme: ; = ? @ [ HlIlJlKl] GeKeMeNeOeXeZe9e[ebj{eLlMlNl}e~eafcf` Pl{ Sl| } ~ 0l3l5l#l$l%labbbcb-l.l/l`lambmcmdmemdbgmhmimffhfebfbgbhbibjbmmnmompmkbBfFfHfIfJfSfUf4f:fdj[fqmrmsm^f_f`f|fnbumobxmpbqbrbFmImKmQmRmSmsbtbubZm0m1m#m)m*m+m,m-mvb/m:m;magcgwbxbybzbAbBb[m]m^m_mCbwgAgCgDgEgNgPgZg+gfj:g`m{m|m=g?g@g]gFb~mGbcnHbIbJbknnnpnvnwnxnKbLbMbEnFnGnQnVnWnXnYnZnNb1n2n3n`g|gObPbQbRbSbTb7n8n9n!nUbrhvhxhyhzhIhKhUh%hhj+h#n$n%n-h.h/h;hXb(nYb+nZb0b1b?n]n_naoboco2b3b4bjokolovoAoBoCoDoEo5bGoHoIo@h]h6b7b8b9b!b#bMoNoOoPo$bmiqisitiuiDiFiPi8ijj

24 return None 2lcljmjnjncocpcrcE pjF sjG H I AjDjFjLjMjNjJ K L UjVjWj6j#j$j%j'j(jM *j+j,jucwcN O P Q R S :j;j=j?jT QcUcWcXcYc7c9c,cbd|igd@j[j]jidjdkdmdW _jX |jY Z 0 fkikkkqkrksk1 2 3 zkAkBkLkQkRkSkTkUk4 WkXkYkpdrd5 6 7 8 9 ! 2k3k4k5k# LdPdRdSdTd2d4d'd{d~ibe6k7k8kdeeefehe' !k( %k) * + .k;k?k`k{k|k, - . elflglqlvlwlxlylzl/ BlClDlkeme: ; = ? @ [ HlIlJlKl] GeKeMeNeOeXeZe9e[ebj{eLlMlNl}e~eafcf` Pl{ Sl| } ~ 0l3l5l#l$l%labbbcb-l.l/l`lambmcmdmemdbgmhmimffhfebfbgbhbibjbmmnmompmkbBfFfHfIfJfSfUf4f:fdj[fqmrmsm^f_f`f|fnbumobxmpbqbrbFmImKmQmRmSmsbtbubZm0m1m#m)m*m+m,m-mvb/m:m;magcgwbxbybzbAbBb[m]m^m_mCbwgAgCgDgEgNgPgZg+gfj:g`m{m|m=g?g@g]gFb~mGbcnHbIbJbknnnpnvnwnxnKbLbMbEnFnGnQnVnWnXnYnZnNb1n2n3n`g|gObPbQbRbSbTb7n8n9n!nUbrhvhxhyhzhIhKhUh%hhj+h#n$n%n-h.h/h;hXb(nYb+nZb0b1b?n]n_naoboco2b3b4bjokolovoAoBoCoDoEo5bGoHoIo@h]h6b7b8b9b!b#bMoNoOoPo$bmiqisitiuiDiFiPi8ijj

25 

26 logger.debug("App config loaded successfully") 2mcC a b c d qcD ojscqjrjtjujvjwjxjyjzjBjCjEjGjHjIjJjKjOjPjQjRjSjTjXjYjZj0j1j2j3j4j5j7j8j9j!j)j-j.jtcvc/jxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcRcScTcVcZc0c1c2c3c4c5c6c8c!c#c$c%c'c(c)c*c+c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadcdddedfd}ihdU e f g h ldV ^jnd`j{j}j~jakbkckdkekgkhkjklkmknkokpktkukvkwkxkykCkDkEkFkGkHkIkJkKkMkNkOkPkVkZk0kodqd1ksdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdMdNdOdQdUdVdWdXdYdZd0d1d3d5d6d7d8d9d!d#d$d%d(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d|d}d~daeajce$ i j k l ge% 9kie#k$k'k(k)k*k+k,k-k/k:k=k@k[k]k^k_k}k~kalblcldlhliljlklllmlnlolplrlsltlulAlElFljeleGlneoepeqereseteuevewexeyezeAeBeCeDeEeFeHeIeJeLePeQeReSeTeUeVeWeYe0e1e2e3e4e5e6e7e8e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e]e^e_e`ecj|e^ m n o p bf_ OldfQlRlTlUlVlWlXlYlZl1l2l4l6l7l8l9l!l'l(l)l*l+l,l:l;l=l?l@l[l]l^l_l{l|l}l~lfmjmkmefgflmifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfCfDfEfGfKfLfMfNfOfPfQfRfTfVfWfXfYfZf0f1f2f3f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f;f=f?f@fej]flbq r s t {fmbtm}fvmwmymzmAmBmCmDmEmGmHmJmLmMmNmOmPmTmUmVmWmXmYm2m3m4m5m6m7m8m9m!m$m%m'm(m.m=m?m~fbg@mdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgxgygzgBgFgGgHgIgJgKgLgMgOgQgRgSgTgUgVgWgXgYg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g,g-g.g/ggj;gDbu v w x [gEb}m^ganbndnenfngnhninjnlnmnonqnrnsntnunynznAnBnCnDnHnInJnKnLnMnNnOnPnRnSnTnUn0n4n5n_g{g6n}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhshthuhwhAhBhChDhEhFhGhHhJhLhMhNhOhPhQhRhShThVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h'h(h)h*hij,hVby z A B :hWb'n=h)n*n,n-n.n/n:n;n=n@n[n^n`n{n|n}n~ndoeofogohoiomonooopoqorosotouowoxoyozoFoJoKo?h[hLo^h_h`h{h|h}h~haibicidieifigihiiijikilinioipiriviwixiyiziAiBiCiEiGiHiIiJiKiLiMiNiOiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i9i!i#i$ikj

27 return AppConfig.model_validate_json(config_path.read_text(encoding="utf-8")) 2mcC a b c d qcD ojscqjrjtjujvjwjxjyjzjBjCjEjGjHjIjJjKjOjPjQjRjSjTjXjYjZj0j1j2j3j4j5j7j8j9j!j)j-j.jtcvc/jxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcRcScTcVcZc0c1c2c3c4c5c6c8c!c#c$c%c'c(c)c*c+c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadcdddedfd}ihdU e f g h ldV ^jnd`j{j}j~jakbkckdkekgkhkjklkmknkokpktkukvkwkxkykCkDkEkFkGkHkIkJkKkMkNkOkPkVkZk0kodqd1ksdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdMdNdOdQdUdVdWdXdYdZd0d1d3d5d6d7d8d9d!d#d$d%d(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d|d}d~daeajce$ i j k l ge% 9kie#k$k'k(k)k*k+k,k-k/k:k=k@k[k]k^k_k}k~kalblcldlhliljlklllmlnlolplrlsltlulAlElFljeleGlneoepeqereseteuevewexeyezeAeBeCeDeEeFeHeIeJeLePeQeReSeTeUeVeWeYe0e1e2e3e4e5e6e7e8e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e]e^e_e`ecj|e^ m n o p bf_ OldfQlRlTlUlVlWlXlYlZl1l2l4l6l7l8l9l!l'l(l)l*l+l,l:l;l=l?l@l[l]l^l_l{l|l}l~lfmjmkmefgflmifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfCfDfEfGfKfLfMfNfOfPfQfRfTfVfWfXfYfZf0f1f2f3f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f;f=f?f@fej]flbq r s t {fmbtm}fvmwmymzmAmBmCmDmEmGmHmJmLmMmNmOmPmTmUmVmWmXmYm2m3m4m5m6m7m8m9m!m$m%m'm(m.m=m?m~fbg@mdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgxgygzgBgFgGgHgIgJgKgLgMgOgQgRgSgTgUgVgWgXgYg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g,g-g.g/ggj;gDbu v w x [gEb}m^ganbndnenfngnhninjnlnmnonqnrnsntnunynznAnBnCnDnHnInJnKnLnMnNnOnPnRnSnTnUn0n4n5n_g{g6n}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhshthuhwhAhBhChDhEhFhGhHhJhLhMhNhOhPhQhRhShThVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h'h(h)h*hij,hVby z A B :hWb'n=h)n*n,n-n.n/n:n;n=n@n[n^n`n{n|n}n~ndoeofogohoiomonooopoqorosotouowoxoyozoFoJoKo?h[hLo^h_h`h{h|h}h~haibicidieifigihiiijikilinioipiriviwixiyiziAiBiCiEiGiHiIiJiKiLiMiNiOiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i9i!i#i$ikj

28 

29 

30def resolve_app_id( 2ecfcgchcicjckc

31 *, app_id: str | None = None, path: Path | None = None 

32) -> str | None: 

33 if app_id is not None: 2QoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!olc#o$o%omc'o(o)o*o+o,o-o.o/o:o;o=o?o@o[onc]o%b^oa b 'b_o`o{o|o}o~o(bapc bpoccp)bdpeppcfpd gpqchprcipjpkpsclpmpnpopppqprptcsptpucvcupvpwpwcxpxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcypzpApBpCpDpEpFpScGpHpTcIpUcVcJpKpLpWcMpNpXcOpPpQpRpYcZc0c1c2c3c4c5cSpTpUpVpWpXpYp6c7cZp8c9c!c#c$c%c'c(c)c*c0p1p2p3p4p5p6p+c,c-c.c7p8p/c:c;c=c?c@c9p[c]c^c_c`c{c|c}c~cadbdcdddedfdex|i}i!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^pgd_p`p{phd|p}p~paqbqcqdqeqfqgqhqiqjqkqlqidmq*bnqe f +boqpqqqrqsqtq,buqg vqjdwq-bxqyqkdzqh AqldBqmdCqDqEqndFqGqHqIqJqKqLqodMqNqpdqdOqPqQqrdRqsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdSqTqUqVqWqXqYqZqNd0q1qOd2qPdQd3q4q5qRd6q7qSd8q9q!q#qTdUdVdWdXdYdZd0d$q%q'q(q)q*q+q1d2d,q3d4d5d6d7d8d9d!d#d$d-q.q/q:q;q=q?q%d'd(d)d@q[q*d+d,d-d.d/d]q:d;d=d?d@d[d]d^d_d`d{d|d}d~daefx~iaj^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrbeorprqrcerrsrtrurvrwrxryrzrArBrCrDrErFrdeGr.bHri j /bIrJrKrLrMrNr:bOrk PreeQr;bRrSrfeTrl UrgeVrheWrXrYrieZr0r1r2r3r4r5rje6r7rkele8r9r!rme#rneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHe$r%r'r(r)r*r+r,rIe-r.rJe/rKeLe:r;r=rMe?r@rNe[r]r^r_rOePeQeReSeTeUeVe`r{r|r}r~rasbsWeXecsYeZe0e1e2e3e4e5e6e7edsesfsgshsisjs8e9e!e#eksls$e%e'e(e)e*ems+e,e-e.e/e:e;e=e?e@e[e]e^e_e`egxbjcjnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHs{eIsJsKs|eLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs}e0s=b1sm n ?b2s3s4s5s6s7s@b8so 9s~e!s[b#s$saf%sp 'sbf(scf)s*s+sdf,s-s.s/s:s;s=sef?s@sffgf[s]s^shf_sifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCf`s{s|s}s~satbtctDfdtetEfftFfGfgthtitHfjtktIfltmtntotJfKfLfMfNfOfPfQfptqtrtstttutvtRfSfwtTfUfVfWfXfYfZf0f1f2fxtytztAtBtCtDt3f4f5f6fEtFt7f8f9f!f#f$fGt%f'f(f)f*f+f,f-f.f/f:f;f=f?f@fhxdjejHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t[f2t3t4t]f5t6t7t8t9t!t#t$t%t't(t)t*t+t,t^f-t]b.tq r ^b/t:t;t=t?t@t_b[ts ]t_f^t`b_t`t`f{tt |t{f}t|f~taubu}fcudueufuguhuiu~fjukuagbglumunucgoudgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgpuqurusutuuuvuwuygxuyuzgzuAgBgAuBuCuCgDuEuDgFuGuHuIuEgFgGgHgIgJgKgLgJuKuLuMuNuOuPuMgNgQuOgPgQgRgSgTgUgVgWgXgRuSuTuUuVuWuXuYgZg0g1gYuZu2g3g4g5g6g7g0u8g9g!g#g$g%g'g(g)g*g+g,g-g.g/gixfjgj1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u:g/u:u;u;g=u?u@u[u]u^u_u`u{u|u}u~uavbvcv=gdv{bevu v |bfvgvhvivjvkv}blvw mv?gnv~bovpv@gqvx rv[gsv]gtvuvvv^gwvxvyvzvAvBvCv_gDvEv`g{gFvGvHv|gIv}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshJvKvLvMvNvOvPvQvthRvSvuhTvvhwhUvVvWvxhXvYvyhZv0v1v2vzhAhBhChDhEhFhGh3v4v5v6v7v8v9vHhIh!vJhKhLhMhNhOhPhQhRhSh#v$v%v'v(v)v*vThUhVhWh+v,vXhYhZh0h1h2h-v3h4h5h6h7h8h9h!h#h$h%h'h(h)h*hjxhjij.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwew+hfwgwhw,hiwjwkwlwmwnwowpwqwrwswtwuwvwww-hxwacywy z bczwAwBwCwDwEwccFwA Gw.hHwdcIwJw/hKwB Lw:hMw;hNwOwPw=hQwRwSwTwUwVwWw?hXwYw@h[hZw0w1w]h2w^h_h`h{h|h}h~haibicidieifigihiiijikilimini3w4w5w6w7w8w9w!woi#w$wpi%wqiri'w(w)wsi*w+wti,w-w.w/wuiviwixiyiziAiBi:w;w=w?w@w[w]wCiDi^wEiFiGiHiIiJiKiLiMiNi_w`w{w|w}w~waxOiPiQiRibxcxSiTiUiViWiXidxYiZi0i1i2i3i4i5i6i7i8i9i!i#i$ikxjjkj

34 return app_id 2QoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o%b^o'b_o`o{o|o}o~o(bapbpcp)bdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9pex!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmq*bnq+boqpqqqrqsqtq,buqvqwq-bxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qfx^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGr.bHr/bIrJrKrLrMrNr:bOrPrQr;bRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsgxnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s=b1s?b2s3s4s5s6s7s@b8s9s!s[b#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGthxHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t]b.t^b/t:t;t=t?t@t_b[t]t^t`b_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0uix1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdv{bev|bfvgvhvivjvkv}blvmvnv~bovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-vjx.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwacywbczwAwBwCwDwEwccFwGwHwdcIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxkx

35 

36 app_config = get_app_config(path or Path.cwd()) 2lcmcnca b c ocpcd qcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfd|i}igdhdide f g jdkdh ldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dae~iajbecedei j k eefel geheiejekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`ebjcj{e|e}em n o ~eafp bfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@fdjej[f]f^fq r s _f`ft {f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/gfjgj:g;g=gu v w ?g@gx [g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*hhjij+h,h-hy z A .h/hB :h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$ijjkj

37 if app_config is None: 2lcmcnca b c ocpcd qcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfd|i}igdhdide f g jdkdh ldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dae~iajbecedei j k eefel geheiejekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^e_e`ebjcj{e|e}em n o ~eafp bfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@fdjej[f]f^fq r s _f`ft {f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/gfjgj:g;g=gu v w ?g@gx [g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*hhjij+h,h-hy z A .h/hB :h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$ijjkj

38 return None 2lcncocpcrcucwcQcUcWcXcYc7c9c,cbd|igdidjdkdmdpdrdLdPdRdSdTd2d4d'd{d~ibedeeefehekemeGeKeMeNeOeXeZe9e[ebj{e}e~eafcfffhfBfFfHfIfJfSfUf4f:fdj[f^f_f`f|fagcgwgAgCgDgEgNgPgZg+gfj:g=g?g@g]g`g|grhvhxhyhzhIhKhUh%hhj+h-h.h/h;h@h]hmiqisitiuiDiFiPi8ijj

39 

40 return app_config.app_id 2mca b c d qcsctcvcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcRcScTcVcZc0c1c2c3c4c5c6c8c!c#c$c%c'c(c)c*c+c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadcdddedfd}ihde f g h ldndodqdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdMdNdOdQdUdVdWdXdYdZd0d1d3d5d6d7d8d9d!d#d$d%d(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d|d}d~daeajcei j k l geiejeleneoepeqereseteuevewexeyezeAeBeCeDeEeFeHeIeJeLePeQeReSeTeUeVeWeYe0e1e2e3e4e5e6e7e8e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e]e^e_e`ecj|em n o p bfdfefgfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfCfDfEfGfKfLfMfNfOfPfQfRfTfVfWfXfYfZf0f1f2f3f5f6f7f8f9f!f#f$f%f'f(f)f*f+f,f-f.f/f;f=f?f@fej]fq r s t {f}f~fbgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgxgygzgBgFgGgHgIgJgKgLgMgOgQgRgSgTgUgVgWgXgYg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g,g-g.g/ggj;gu v w x [g^g_g{g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhshthuhwhAhBhChDhEhFhGhHhJhLhMhNhOhPhQhRhShThVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h'h(h)h*hij,hy z A B :h=h?h[h^h_h`h{h|h}h~haibicidieifigihiiijikilinioipiriviwixiyiziAiBiCiEiGiHiIiJiKiLiMiNiOiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i9i!i#i$ikj

41 

42 

43def resolve_app_id_or_fail( 2ecfcgchcicjckc

44 toolkit: "FastAPIRichToolkit", 

45 *, 

46 app_id: str | None = None, 

47 path: Path | None = None, 

48 hint: str = "Pass --app-id or run `fastapi cloud apps create --link` first.", 

49) -> str: 

50 target_app_id = resolve_app_id(app_id=app_id, path=path) 2QoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!olc#o$o%omc'o(o)o*o+o,o-o.o/o:o;o=o?o@o[onc]o%b^oa b 'b_o`o{o|o}o~o(bapc bpoccp)bdpeppcfpd gpqchprcipjpkpsclpmpnpopppqprptcsptpucvcupvpwpwcxpxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcypzpApBpCpDpEpFpScGpHpTcIpUcVcJpKpLpWcMpNpXcOpPpQpRpYcZc0c1c2c3c4c5cSpTpUpVpWpXpYp6c7cZp8c9c!c#c$c%c'c(c)c*c0p1p2p3p4p5p6p+c,c-c.c7p8p/c:c;c=c?c@c9p[c]c^c_c`c{c|c}c~cadbdcdddedfd!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^pgd_p`p{phd|p}p~paqbqcqdqeqfqgqhqiqjqkqlqidmq*bnqe f +boqpqqqrqsqtq,buqg vqjdwq-bxqyqkdzqh AqldBqmdCqDqEqndFqGqHqIqJqKqLqodMqNqpdqdOqPqQqrdRqsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdSqTqUqVqWqXqYqZqNd0q1qOd2qPdQd3q4q5qRd6q7qSd8q9q!q#qTdUdVdWdXdYdZd0d$q%q'q(q)q*q+q1d2d,q3d4d5d6d7d8d9d!d#d$d-q.q/q:q;q=q?q%d'd(d)d@q[q*d+d,d-d.d/d]q:d;d=d?d@d[d]d^d_d`d{d|d}d~dae^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrbeorprqrcerrsrtrurvrwrxryrzrArBrCrDrErFrdeGr.bHri j /bIrJrKrLrMrNr:bOrk PreeQr;bRrSrfeTrl UrgeVrheWrXrYrieZr0r1r2r3r4r5rje6r7rkele8r9r!rme#rneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHe$r%r'r(r)r*r+r,rIe-r.rJe/rKeLe:r;r=rMe?r@rNe[r]r^r_rOePeQeReSeTeUeVe`r{r|r}r~rasbsWeXecsYeZe0e1e2e3e4e5e6e7edsesfsgshsisjs8e9e!e#eksls$e%e'e(e)e*ems+e,e-e.e/e:e;e=e?e@e[e]e^e_e`ensospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHs{eIsJsKs|eLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs}e0s=b1sm n ?b2s3s4s5s6s7s@b8so 9s~e!s[b#s$saf%sp 'sbf(scf)s*s+sdf,s-s.s/s:s;s=sef?s@sffgf[s]s^shf_sifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCf`s{s|s}s~satbtctDfdtetEfftFfGfgthtitHfjtktIfltmtntotJfKfLfMfNfOfPfQfptqtrtstttutvtRfSfwtTfUfVfWfXfYfZf0f1f2fxtytztAtBtCtDt3f4f5f6fEtFt7f8f9f!f#f$fGt%f'f(f)f*f+f,f-f.f/f:f;f=f?f@fHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t[f2t3t4t]f5t6t7t8t9t!t#t$t%t't(t)t*t+t,t^f-t]b.tq r ^b/t:t;t=t?t@t_b[ts ]t_f^t`b_t`t`f{tt |t{f}t|f~taubu}fcudueufuguhuiu~fjukuagbglumunucgoudgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgpuqurusutuuuvuwuygxuyuzgzuAgBgAuBuCuCgDuEuDgFuGuHuIuEgFgGgHgIgJgKgLgJuKuLuMuNuOuPuMgNgQuOgPgQgRgSgTgUgVgWgXgRuSuTuUuVuWuXuYgZg0g1gYuZu2g3g4g5g6g7g0u8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u:g/u:u;u;g=u?u@u[u]u^u_u`u{u|u}u~uavbvcv=gdv{bevu v |bfvgvhvivjvkv}blvw mv?gnv~bovpv@gqvx rv[gsv]gtvuvvv^gwvxvyvzvAvBvCv_gDvEv`g{gFvGvHv|gIv}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshJvKvLvMvNvOvPvQvthRvSvuhTvvhwhUvVvWvxhXvYvyhZv0v1v2vzhAhBhChDhEhFhGh3v4v5v6v7v8v9vHhIh!vJhKhLhMhNhOhPhQhRhSh#v$v%v'v(v)v*vThUhVhWh+v,vXhYhZh0h1h2h-v3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwew+hfwgwhw,hiwjwkwlwmwnwowpwqwrwswtwuwvwww-hxwacywy z bczwAwBwCwDwEwccFwA Gw.hHwdcIwJw/hKwB Lw:hMw;hNwOwPw=hQwRwSwTwUwVwWw?hXwYw@h[hZw0w1w]h2w^h_h`h{h|h}h~haibicidieifigihiiijikilimini3w4w5w6w7w8w9w!woi#w$wpi%wqiri'w(w)wsi*w+wti,w-w.w/wuiviwixiyiziAiBi:w;w=w?w@w[w]wCiDi^wEiFiGiHiIiJiKiLiMiNi_w`w{w|w}w~waxOiPiQiRibxcxSiTiUiViWiXidxYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i

51 

52 if target_app_id is None: 2QoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!olc#o$o%omc'o(o)o*o+o,o-o.o/o:o;o=o?o@o[onc]o%b^oa b 'b_o`o{o|o}o~o(bapc bpoccp)bdpeppcfpd gpqchprcipjpkpsclpmpnpopppqprptcsptpucvcupvpwpwcxpxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcypzpApBpCpDpEpFpScGpHpTcIpUcVcJpKpLpWcMpNpXcOpPpQpRpYcZc0c1c2c3c4c5cSpTpUpVpWpXpYp6c7cZp8c9c!c#c$c%c'c(c)c*c0p1p2p3p4p5p6p+c,c-c.c7p8p/c:c;c=c?c@c9p[c]c^c_c`c{c|c}c~cadbdcdddedfd!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^pgd_p`p{phd|p}p~paqbqcqdqeqfqgqhqiqjqkqlqidmq*bnqe f +boqpqqqrqsqtq,buqg vqjdwq-bxqyqkdzqh AqldBqmdCqDqEqndFqGqHqIqJqKqLqodMqNqpdqdOqPqQqrdRqsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdSqTqUqVqWqXqYqZqNd0q1qOd2qPdQd3q4q5qRd6q7qSd8q9q!q#qTdUdVdWdXdYdZd0d$q%q'q(q)q*q+q1d2d,q3d4d5d6d7d8d9d!d#d$d-q.q/q:q;q=q?q%d'd(d)d@q[q*d+d,d-d.d/d]q:d;d=d?d@d[d]d^d_d`d{d|d}d~dae^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrbeorprqrcerrsrtrurvrwrxryrzrArBrCrDrErFrdeGr.bHri j /bIrJrKrLrMrNr:bOrk PreeQr;bRrSrfeTrl UrgeVrheWrXrYrieZr0r1r2r3r4r5rje6r7rkele8r9r!rme#rneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHe$r%r'r(r)r*r+r,rIe-r.rJe/rKeLe:r;r=rMe?r@rNe[r]r^r_rOePeQeReSeTeUeVe`r{r|r}r~rasbsWeXecsYeZe0e1e2e3e4e5e6e7edsesfsgshsisjs8e9e!e#eksls$e%e'e(e)e*ems+e,e-e.e/e:e;e=e?e@e[e]e^e_e`ensospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHs{eIsJsKs|eLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs}e0s=b1sm n ?b2s3s4s5s6s7s@b8so 9s~e!s[b#s$saf%sp 'sbf(scf)s*s+sdf,s-s.s/s:s;s=sef?s@sffgf[s]s^shf_sifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCf`s{s|s}s~satbtctDfdtetEfftFfGfgthtitHfjtktIfltmtntotJfKfLfMfNfOfPfQfptqtrtstttutvtRfSfwtTfUfVfWfXfYfZf0f1f2fxtytztAtBtCtDt3f4f5f6fEtFt7f8f9f!f#f$fGt%f'f(f)f*f+f,f-f.f/f:f;f=f?f@fHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t[f2t3t4t]f5t6t7t8t9t!t#t$t%t't(t)t*t+t,t^f-t]b.tq r ^b/t:t;t=t?t@t_b[ts ]t_f^t`b_t`t`f{tt |t{f}t|f~taubu}fcudueufuguhuiu~fjukuagbglumunucgoudgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgpuqurusutuuuvuwuygxuyuzgzuAgBgAuBuCuCgDuEuDgFuGuHuIuEgFgGgHgIgJgKgLgJuKuLuMuNuOuPuMgNgQuOgPgQgRgSgTgUgVgWgXgRuSuTuUuVuWuXuYgZg0g1gYuZu2g3g4g5g6g7g0u8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u:g/u:u;u;g=u?u@u[u]u^u_u`u{u|u}u~uavbvcv=gdv{bevu v |bfvgvhvivjvkv}blvw mv?gnv~bovpv@gqvx rv[gsv]gtvuvvv^gwvxvyvzvAvBvCv_gDvEv`g{gFvGvHv|gIv}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshJvKvLvMvNvOvPvQvthRvSvuhTvvhwhUvVvWvxhXvYvyhZv0v1v2vzhAhBhChDhEhFhGh3v4v5v6v7v8v9vHhIh!vJhKhLhMhNhOhPhQhRhSh#v$v%v'v(v)v*vThUhVhWh+v,vXhYhZh0h1h2h-v3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwew+hfwgwhw,hiwjwkwlwmwnwowpwqwrwswtwuwvwww-hxwacywy z bczwAwBwCwDwEwccFwA Gw.hHwdcIwJw/hKwB Lw:hMw;hNwOwPw=hQwRwSwTwUwVwWw?hXwYw@h[hZw0w1w]h2w^h_h`h{h|h}h~haibicidieifigihiiijikilimini3w4w5w6w7w8w9w!woi#w$wpi%wqiri'w(w)wsi*w+wti,w-w.w/wuiviwixiyiziAiBi:w;w=w?w@w[w]wCiDi^wEiFiGiHiIiJiKiLiMiNi_w`w{w|w}w~waxOiPiQiRibxcxSiTiUiViWiXidxYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i

53 toolkit.fail( 2lcncocpcrcucwcQcUcWcXcYc7c9c,cbdgdidjdkdmdpdrdLdPdRdSdTd2d4d'd{dbedeeefehekemeGeKeMeNeOeXeZe9e[e{e}e~eafcfffhfBfFfHfIfJfSfUf4f:f[f^f_f`f|fagcgwgAgCgDgEgNgPgZg+g:g=g?g@g]g`g|grhvhxhyhzhIhKhUh%h+h-h.h/h;h@h]hmiqisitiuiDiFiPi8i

54 "missing_required_input", 

55 "App ID is required.", 

56 hint=hint, 

57 ) 

58 

59 return target_app_id 2QoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%omc'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o%b^oa b 'b_o`o{o|o}o~o(bapc bpcp)bdpepfpd gpqchpipjpkpsclpmpnpopppqprptcsptpvcupvpwpxpxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcRcypzpApBpCpDpEpFpScGpHpTcIpVcJpKpLpMpNpOpPpQpRpZc0c1c2c3c4c5cSpTpUpVpWpXpYp6cZp8c!c#c$c%c'c(c)c*c0p1p2p3p4p5p6p+c-c.c7p8p/c:c;c=c?c@c9p[c]c^c_c`c{c|c}c~cadcdddedfd!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{phd|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmq*bnqe f +boqpqqqrqsqtq,buqg vqwq-bxqyqzqh AqldBqCqDqEqndFqGqHqIqJqKqLqodMqNqqdOqPqQqRqsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdMdSqTqUqVqWqXqYqZqNd0q1qOd2qQd3q4q5q6q7q8q9q!q#qUdVdWdXdYdZd0d$q%q'q(q)q*q+q1d,q3d5d6d7d8d9d!d#d$d-q.q/q:q;q=q?q%d(d)d@q[q*d+d,d-d.d/d]q:d;d=d?d@d[d]d^d_d`d|d}d~dae^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrcerrsrtrurvrwrxryrzrArBrCrDrErFrGr.bHri j /bIrJrKrLrMrNr:bOrk PrQr;bRrSrTrl UrgeVrWrXrYrieZr0r1r2r3r4r5rje6r7rle8r9r!r#rneoepeqereseteuevewexeyezeAeBeCeDeEeFeHe$r%r'r(r)r*r+r,rIe-r.rJe/rLe:r;r=r?r@r[r]r^r_rPeQeReSeTeUeVe`r{r|r}r~rasbsWecsYe0e1e2e3e4e5e6e7edsesfsgshsisjs8e!e#eksls$e%e'e(e)e*ems+e,e-e.e/e:e;e=e?e@e]e^e_e`ensospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKs|eLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s=b1sm n ?b2s3s4s5s6s7s@b8so 9s!s[b#s$s%sp 'sbf(s)s*s+sdf,s-s.s/s:s;s=sef?s@sgf[s]s^s_sifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfCf`s{s|s}s~satbtctDfdtetEfftGfgthtitjtktltmtntotKfLfMfNfOfPfQfptqtrtstttutvtRfwtTfVfWfXfYfZf0f1f2fxtytztAtBtCtDt3f5f6fEtFt7f8f9f!f#f$fGt%f'f(f)f*f+f,f-f.f/f;f=f?f@fHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t]f5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t]b.tq r ^b/t:t;t=t?t@t_b[ts ]t^t`b_t`t{tt |t{f}t~taubu}fcudueufuguhuiu~fjukubglumunuoudgegfggghgigjgkglgmgngogpgqgrgsgtgugvgxgpuqurusutuuuvuwuygxuyuzgzuBgAuBuCuDuEuFuGuHuIuFgGgHgIgJgKgLgJuKuLuMuNuOuPuMgQuOgQgRgSgTgUgVgWgXgRuSuTuUuVuWuXuYg0g1gYuZu2g3g4g5g6g7g0u8g9g!g#g$g%g'g(g)g*g,g-g.g/g1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u;g=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdv{bevu v |bfvgvhvivjvkv}blvw mvnv~bovpvqvx rv[gsvtvuvvv^gwvxvyvzvAvBvCv_gDvEv{gFvGvHvIv}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhshJvKvLvMvNvOvPvQvthRvSvuhTvwhUvVvWvXvYvZv0v1v2vAhBhChDhEhFhGh3v4v5v6v7v8v9vHh!vJhLhMhNhOhPhQhRhSh#v$v%v'v(v)v*vThVhWh+v,vXhYhZh0h1h2h-v3h4h5h6h7h8h9h!h#h$h'h(h)h*h.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhw,hiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwacywy z bczwAwBwCwDwEwccFwA GwHwdcIwJwKwB Lw:hMwNwOwPw=hQwRwSwTwUwVwWw?hXwYw[hZw0w1w2w^h_h`h{h|h}h~haibicidieifigihiiijikilini3w4w5w6w7w8w9w!woi#w$wpi%wri'w(w)w*w+w,w-w.w/wviwixiyiziAiBi:w;w=w?w@w[w]wCi^wEiGiHiIiJiKiLiMiNi_w`w{w|w}w~waxOiQiRibxcxSiTiUiViWiXidxYiZi0i1i2i3i4i5i6i7i9i!i#i$i

60 

61 

62README = """ 2ecfcgchcicjckc

63> Why do I have a folder named ".fastapicloud" in my project? 🤔 

64The ".fastapicloud" folder is created when you link a directory to a FastAPI Cloud project. 

65 

66> What does the "cloud.json" file contain? 

67The "cloud.json" file contains: 

68- The ID of the FastAPI app that you linked ("app_id") 

69- The ID of the team your FastAPI Cloud project is owned by ("team_id") 

70 

71> Should I commit the ".fastapicloud" folder? 

72No, you should not commit the ".fastapicloud" folder to your version control system. 

73That's why there's a ".gitignore" file in this folder. 

74""" 

75 

76 

77def write_app_config(path_to_deploy: Path, app_config: AppConfig) -> None: 2ecfcgchcicjckc

78 config_path = path_to_deploy / ".fastapicloud/cloud.json" 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b

79 readme_path = path_to_deploy / ".fastapicloud/README.md" 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b

80 gitignore_path = path_to_deploy / ".fastapicloud/.gitignore" 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b

81 

82 logger.debug("Writing app config to: %s", config_path) 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b

83 logger.debug("App config data: %s", app_config) 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b

84 

85 config_path.parent.mkdir(parents=True, exist_ok=True) 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b

86 

87 config_path.write_text( 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b

88 app_config.model_dump_json(), 

89 encoding="utf-8", 

90 ) 

91 readme_path.write_text(README, encoding="utf-8") 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b

92 gitignore_path.write_text("*") 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b

93 

94 logger.debug("App config files written successfully") 2%iC %ba b 'b(bc )bd 'i(iD E F G H I J K L M N O P Q R S T )iU *be f +b,bg -bh *i+iV W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # ,i$ .bi j /b:bk ;bl -i.i% ' ( ) * + , - . / : ; = ? @ [ ] /i^ =bm n ?b@bo [bp :i;i_ ` { | } ~ abbbcbdbebfbgbhbibjbkb=ilb]bq r ^b_bs `bt ?i@imbnbobpbqbrbsbtbubvbwbxbybzbAbBbCb[iDb{bu v |b}bw ~bx ]i^iEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUb_iVbacy z bcccA dcB `i{iWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b