Coverage for src/fastapi_cli/discover.py: 100%
95 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-11 09:18 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-11 09:18 +0000
1import importlib 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
2import sys 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
3from dataclasses import dataclass 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
4from logging import getLogger 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
5from pathlib import Path 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
6from typing import Literal, TypeAlias 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
8from fastapi_cli.exceptions import FastAPICLIException 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
10logger = getLogger(__name__) 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
12try: 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
13 from fastapi import FastAPI 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
14except ImportError: # pragma: no cover
15 FastAPI = None # type: ignore[misc, assignment]
18def get_default_path() -> Path: 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
19 potential_paths = ( 2Q R a b c EiFiS T U V W d e f GiHiX Y Z 0 1 g h i IiJi2 3 4 5 6 j k l KiLi7 8 9 ! # m n o MiNi$ % ' ( ) p q r OiPi* + , - . s t u QiRi/ : ; = ? v w x SiTi@ [ ] ^ _ y z A UiVi` { | } ~ B C D WiXiabbbcbdbebE F G YiZifbgbhbibjbH I J 0i1ikblbmbnbobK L M 2i3ipbqbrbsbtbN O P 4i5iubvbwb
20 "main.py",
21 "app.py",
22 "api.py",
23 "app/main.py",
24 "app/app.py",
25 "app/api.py",
26 )
28 for full_path in potential_paths: 2Q R a b c EiFiS T U V W d e f GiHiX Y Z 0 1 g h i IiJi2 3 4 5 6 j k l KiLi7 8 9 ! # m n o MiNi$ % ' ( ) p q r OiPi* + , - . s t u QiRi/ : ; = ? v w x SiTi@ [ ] ^ _ y z A UiVi` { | } ~ B C D WiXiabbbcbdbebE F G YiZifbgbhbibjbH I J 0i1ikblbmbnbobK L M 2i3ipbqbrbsbtbN O P 4i5iubvbwb
29 path = Path(full_path) 2Q R a b c EiFiS T U V W d e f GiHiX Y Z 0 1 g h i IiJi2 3 4 5 6 j k l KiLi7 8 9 ! # m n o MiNi$ % ' ( ) p q r OiPi* + , - . s t u QiRi/ : ; = ? v w x SiTi@ [ ] ^ _ y z A UiVi` { | } ~ B C D WiXiabbbcbdbebE F G YiZifbgbhbibjbH I J 0i1ikblbmbnbobK L M 2i3ipbqbrbsbtbN O P 4i5iubvbwb
30 if path.is_file(): 2Q R a b c EiFiS T U V W d e f GiHiX Y Z 0 1 g h i IiJi2 3 4 5 6 j k l KiLi7 8 9 ! # m n o MiNi$ % ' ( ) p q r OiPi* + , - . s t u QiRi/ : ; = ? v w x SiTi@ [ ] ^ _ y z A UiVi` { | } ~ B C D WiXiabbbcbdbebE F G YiZifbgbhbibjbH I J 0i1ikblbmbnbobK L M 2i3ipbqbrbsbtbN O P 4i5iubvbwb
31 return path 2Q R a b c S T U V W d e f X Y Z 0 1 g h i 2 3 4 5 6 j k l 7 8 9 ! # m n o $ % ' ( ) p q r * + , - . s t u / : ; = ? v w x @ [ ] ^ _ y z A ` { | } ~ B C D abbbcbdbebE F G fbgbhbibjbH I J kblbmbnbobK L M pbqbrbsbtbN O P ubvbwb
33 raise FastAPICLIException( 2EiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i
34 "Could not find a default file to run, please provide an explicit path"
35 )
38@dataclass 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
39class ModuleData: 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
40 module_import_str: str 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
41 extra_sys_path: Path 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
42 module_paths: list[Path] 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
45def get_module_data_from_path(path: Path) -> ModuleData: 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
46 use_path = path.resolve() 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
47 module_path = use_path 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
48 if use_path.is_file() and use_path.stem == "__init__": 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
49 module_path = use_path.parent 2CdxbFdBbIdFbLdJbOdNbRdRbUdVbXdZb0d3b3d7b6d#b9d(b$d,b(d:b
50 module_paths = [module_path] 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
51 extra_sys_path = module_path.parent 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
52 for parent in module_path.parents: 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
53 init_path = parent / "__init__.py" 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
54 if init_path.is_file(): 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
55 module_paths.insert(0, parent) 2@b[ba b c =h]b^b_b`b{b|bBd{g}bxbybzbAb~bacd e f @hbcccdcecfcgcEdbhhcBbCbDbEbicjcg h i ]hkclcmcncocpcHdghqcFbGbHbIbrcscj k l _htcucvcwcxcycKdlhzcJbKbLbMbAcBcm n o {hCcDcEcFcGcHcNdqhIcNbObPbQbJcKcp q r }hLcMcNcOcPcQcQdvhRcRbSbTbUbScTcs t u aiUcVcWcXcYcZcTdAh0cVbWbXbYb1c2cv w x ci3c4c5c6c7c8cWdFh9cZb0b1b2b!c#cy z A ei$c%c'c(c)c*cZdKh+c3b4b5b6b,c-cB C D gi.c/c:c;c=c?c2dPh@c7b8b9b!b[c]cE F G ii^c_c`c{c|c}c5dUh~c#b$b%b'badbdH I J kicdddedfdgdhd8dZhid(b)b*b+bjdkdK L M mildmdndodpdqd#d4hrd,b-b.b/bsdtdN O P oiudvdwdxdydzd'd9hAd:b;b=b?b
56 extra_sys_path = parent.parent 2@b[ba b c =h]b^b_b`b{b|bBd{g}bxbybzbAb~bacd e f @hbcccdcecfcgcEdbhhcBbCbDbEbicjcg h i ]hkclcmcncocpcHdghqcFbGbHbIbrcscj k l _htcucvcwcxcycKdlhzcJbKbLbMbAcBcm n o {hCcDcEcFcGcHcNdqhIcNbObPbQbJcKcp q r }hLcMcNcOcPcQcQdvhRcRbSbTbUbScTcs t u aiUcVcWcXcYcZcTdAh0cVbWbXbYb1c2cv w x ci3c4c5c6c7c8cWdFh9cZb0b1b2b!c#cy z A ei$c%c'c(c)c*cZdKh+c3b4b5b6b,c-cB C D gi.c/c:c;c=c?c2dPh@c7b8b9b!b[c]cE F G ii^c_c`c{c|c}c5dUh~c#b$b%b'badbdH I J kicdddedfdgdhd8dZhid(b)b*b+bjdkdK L M mildmdndodpdqd#d4hrd,b-b.b/bsdtdN O P oiudvdwdxdydzd'd9hAd:b;b=b?b
57 else:
58 break 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
60 module_str = ".".join(p.stem for p in module_paths) 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
61 return ModuleData( 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
62 module_import_str=module_str,
63 extra_sys_path=extra_sys_path.resolve(),
64 module_paths=module_paths,
65 )
68def get_app_name(*, mod_data: ModuleData, app_name: str | None = None) -> str: 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
69 try: 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
70 mod = importlib.import_module(mod_data.module_import_str) 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
71 except (ImportError, ValueError) as e: 2=h@h]h_h{h}haicieigiiikimioi
72 logger.error(f"Import error: {e}") 2=h@h]h_h{h}haicieigiiikimioi
73 logger.warning( 2=h@h]h_h{h}haicieigiiikimioi
74 "Ensure all the package directories have an [blue]__init__.py[/blue] file"
75 )
76 raise 2=h@h]h_h{h}haicieigiiikimioi
77 if not FastAPI: # type: ignore[truthy-function] 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U ]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z bcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 kclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 tcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' CcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , LcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; UcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] 3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | $c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcb.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhb^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbcdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbldmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwbudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
78 raise FastAPICLIException( 2qirisitiuiviwixiyiziAiBiCiDi
79 "Could not import FastAPI, try running 'pip install fastapi'"
80 ) from None
81 object_names = dir(mod) 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeped e f X Y Z bcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
82 object_names_set = set(object_names) 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeped e f X Y Z bcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
83 if app_name: 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeped e f X Y Z bcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
84 if app_name not in object_names_set: 2^g_g`g?h{g|g}g~gah[hbhchdhehfh^hghhhihjhkh`hlhmhnhohph|hqhrhshthuh~hvhwhxhyhzhbiAhBhChDhEhdiFhGhHhIhJhfiKhLhMhNhOhhiPhQhRhShThjiUhVhWhXhYhliZh0h1h2h3hni4h5h6h7h8hpi9h!h
85 raise FastAPICLIException( 2?h[h^h`h|h~hbidifihijilinipi
86 f"Could not find app name {app_name} in {mod_data.module_import_str}"
87 )
88 app = getattr(mod, app_name) 2^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h
89 if not isinstance(app, FastAPI): 2^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h
90 raise FastAPICLIException( 2{gbhghlhqhvhAhFhKhPhUhZh4h9h
91 f"The app name {app_name} in {mod_data.module_import_str} doesn't seem to be a FastAPI app"
92 )
93 return app_name 2^g_g`g|g}g~gahchdhehfhhhihjhkhmhnhohphrhshthuhwhxhyhzhBhChDhEhGhHhIhJhLhMhNhOhQhRhShThVhWhXhYh0h1h2h3h5h6h7h8h!h
94 for preferred_name in ["app", "api"]: 2*d+d,d-dQ @b.d/d[bR :d;d=d?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d|dBdCd}bxbybzbAb}d~dDdaebecedeV ~beefeacW geheiejekelemeneoeped e f X Y Z bcccdcecfcgcqereEdFdhcBbCbDbEbseteGduevewexe0 icyezejc1 AeBeCeDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKeLeHdIdqcFbGbHbIbMeNeJdOePeQeRe5 rcSeTesc6 UeVeWeXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4e5eKdLdzcJbKbLbMb6e7eMd8e9e!e#e! Ac$e%eBc# 'e(e)e*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;e=eNdOdIcNbObPbQb?e@ePd[e]e^e_e( Jc`e{eKc) |e}e~eafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfifQdRdRcRbSbTbUbjfkfSdlfmfnfof- ScpfqfTc. rfsftfufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfCfTdUd0cVbWbXbYbDfEfVdFfGfHfIf= 1cJfKf2c? LfMfNfOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfWfWdXd9cZb0b1b2bXfYfYdZf0f1f2f^ !c3f4f#c_ 5f6f7f8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(f)fZd0d+c3b4b5b6b*f+f1d,f-f.f/f} ,c:f;f-c~ =f?f@f[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}f~f2d3d@c7b8b9b!bagbg4dcgdgegfgdb[cgghg]cebigjgkglgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgtg5d6d~c#b$b%b'bugvg7dwgxgygzgibadAgBgbdjbCgDgEgFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgNg8d9did(b)b*b+bOgPg!dQgRgSgTgnbjdUgVgkdobWgXgYgZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g7g#d$drd,b-b.b/b8g9g%d!g#g$g%gsbsd'g(gtdtb)g*g+g,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g@g'd(dAd:b;b=b?b[g]g)d
95 if preferred_name in object_names_set: 2*d+d,d-dQ @b.d/d[bR :d;d=d?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d|dBdCd}bxbybzbAb}d~dDdaebecedeV ~beefeacW geheiejekelemeneoeped e f X Y Z bcccdcecfcgcqereEdFdhcBbCbDbEbseteGduevewexe0 icyezejc1 AeBeCeDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKeLeHdIdqcFbGbHbIbMeNeJdOePeQeRe5 rcSeTesc6 UeVeWeXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4e5eKdLdzcJbKbLbMb6e7eMd8e9e!e#e! Ac$e%eBc# 'e(e)e*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;e=eNdOdIcNbObPbQb?e@ePd[e]e^e_e( Jc`e{eKc) |e}e~eafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfifQdRdRcRbSbTbUbjfkfSdlfmfnfof- ScpfqfTc. rfsftfufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfCfTdUd0cVbWbXbYbDfEfVdFfGfHfIf= 1cJfKf2c? LfMfNfOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfWfWdXd9cZb0b1b2bXfYfYdZf0f1f2f^ !c3f4f#c_ 5f6f7f8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(f)fZd0d+c3b4b5b6b*f+f1d,f-f.f/f} ,c:f;f-c~ =f?f@f[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}f~f2d3d@c7b8b9b!bagbg4dcgdgegfgdb[cgghg]cebigjgkglgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgtg5d6d~c#b$b%b'bugvg7dwgxgygzgibadAgBgbdjbCgDgEgFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgNg8d9did(b)b*b+bOgPg!dQgRgSgTgnbjdUgVgkdobWgXgYgZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g7g#d$drd,b-b.b/b8g9g%d!g#g$g%gsbsd'g(gtdtb)g*g+g,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g@g'd(dAd:b;b=b?b[g]g)d
96 obj = getattr(mod, preferred_name) 2*d+d,d-dQ @b.d/d[bR :d;d=d?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d|dCd}bxb}d~daebecedeV ~beefeacW geheiejekelemeneoeped e f X Y Z bcccdcecfcgcqereFdhcBbseteuevewexe0 icyezejc1 AeBeCeDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKeLeIdqcFbMeNeOePeQeRe5 rcSeTesc6 UeVeWeXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4e5eLdzcJb6e7e8e9e!e#e! Ac$e%eBc# 'e(e)e*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;e=eOdIcNb?e@e[e]e^e_e( Jc`e{eKc) |e}e~eafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfifRdRcRbjfkflfmfnfof- ScpfqfTc. rfsftfufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfCfUd0cVbDfEfFfGfHfIf= 1cJfKf2c? LfMfNfOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfWfXd9cZbXfYfZf0f1f2f^ !c3f4f#c_ 5f6f7f8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(f)f0d+c3b*f+f,f-f.f/f} ,c:f;f-c~ =f?f@f[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}f~f3d@c7bagbgcgdgegfgdb[cgghg]cebigjgkglgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgtg6d~c#bugvgwgxgygzgibadAgBgbdjbCgDgEgFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgNg9did(bOgPgQgRgSgTgnbjdUgVgkdobWgXgYgZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g7g$drd,b8g9g!g#g$g%gsbsd'g(gtdtb)g*g+g,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g@g(dAd:b[g]g
97 if isinstance(obj, FastAPI): 2*d+d,d-dQ @b.d/d[bR :d;d=d?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d|dCd}bxb}d~daebecedeV ~beefeacW geheiejekelemeneoeped e f X Y Z bcccdcecfcgcqereFdhcBbseteuevewexe0 icyezejc1 AeBeCeDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKeLeIdqcFbMeNeOePeQeRe5 rcSeTesc6 UeVeWeXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4e5eLdzcJb6e7e8e9e!e#e! Ac$e%eBc# 'e(e)e*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;e=eOdIcNb?e@e[e]e^e_e( Jc`e{eKc) |e}e~eafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfifRdRcRbjfkflfmfnfof- ScpfqfTc. rfsftfufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfCfUd0cVbDfEfFfGfHfIf= 1cJfKf2c? LfMfNfOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfWfXd9cZbXfYfZf0f1f2f^ !c3f4f#c_ 5f6f7f8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(f)f0d+c3b*f+f,f-f.f/f} ,c:f;f-c~ =f?f@f[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}f~f3d@c7bagbgcgdgegfgdb[cgghg]cebigjgkglgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgtg6d~c#bugvgwgxgygzgibadAgBgbdjbCgDgEgFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgNg9did(bOgPgQgRgSgTgnbjdUgVgkdobWgXgYgZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g7g$drd,b8g9g!g#g$g%gsbsd'g(gtdtb)g*g+g,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g@g(dAd:b[g]g
98 return preferred_name 2*d+d,d-dQ @b.d/d[bR :d;d=d?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d|dCd}bxb}d~daebecedeV ~beefeacW geheiejekelemeneoeped e f X Y Z bcccdcecfcgcqereFdhcBbseteuevewexe0 icyezejc1 AeBeCeDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKeLeIdqcFbMeNeOePeQeRe5 rcSeTesc6 UeVeWeXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4e5eLdzcJb6e7e8e9e!e#e! Ac$e%eBc# 'e(e)e*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;e=eOdIcNb?e@e[e]e^e_e( Jc`e{eKc) |e}e~eafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfifRdRcRbjfkflfmfnfof- ScpfqfTc. rfsftfufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfCfUd0cVbDfEfFfGfHfIf= 1cJfKf2c? LfMfNfOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfWfXd9cZbXfYfZf0f1f2f^ !c3f4f#c_ 5f6f7f8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(f)f0d+c3b*f+f,f-f.f/f} ,c:f;f-c~ =f?f@f[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}f~f3d@c7bagbgcgdgegfgdb[cgghg]cebigjgkglgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgtg6d~c#bugvgwgxgygzgibadAgBgbdjbCgDgEgFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgNg9did(bOgPgQgRgSgTgnbjdUgVgkdobWgXgYgZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g7g$drd,b8g9g!g#g$g%gsbsd'g(gtdtb)g*g+g,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g@g(dAd:b[g]g
99 for name in object_names: 2BdybzbAbDdEdCbDbEbGdHdGbHbIbJdKdKbLbMbMdNdObPbQbPdQdSbTbUbSdTdWbXbYbVdWd0b1b2bYdZd4b5b6b1d2d8b9b!b4d5d$b%b'b7d8d)b*b+b!d#d-b.b/b%d'd;b=b?b)d
100 obj = getattr(mod, name) 2BdybzbAbDdEdCbDbEbGdHdGbHbIbJdKdKbLbMbMdNdObPbQbPdQdSbTbUbSdTdWbXbYbVdWd0b1b2bYdZd4b5b6b1d2d8b9b!b4d5d$b%b'b7d8d)b*b+b!d#d-b.b/b%d'd;b=b?b)d
101 if isinstance(obj, FastAPI): 2BdybzbAbDdEdCbDbEbGdHdGbHbIbJdKdKbLbMbMdNdObPbQbPdQdSbTbUbSdTdWbXbYbVdWd0b1b2bYdZd4b5b6b1d2d8b9b!b4d5d$b%b'b7d8d)b*b+b!d#d-b.b/b%d'd;b=b?b)d
102 return name 2ybzbAbDdCbDbEbGdGbHbIbJdKbLbMbMdObPbQbPdSbTbUbSdWbXbYbVd0b1b2bYd4b5b6b1d8b9b!b4d$b%b'b7d)b*b+b!d-b.b/b%d;b=b?b)d
103 raise FastAPICLIException("Could not find FastAPI app in module, try using --app") 2BdEdHdKdNdQdTdWdZd2d5d8d#d'd
106ModuleConfigSource: TypeAlias = Literal[ 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
107 "entrypoint-option",
108 "entrypoint-pyproject",
109 "path-argument",
110 "auto-discovery",
111]
113AppConfigSource: TypeAlias = Literal[ 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
114 "entrypoint-option", "entrypoint-pyproject", "app-option", "auto-discovery"
115]
118@dataclass 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
119class ImportData: 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
120 app_name: str 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
121 module_data: ModuleData 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
122 import_string: str 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
124 module_config_source: ModuleConfigSource 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
125 app_name_config_source: AppConfigSource 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
128def get_import_data( 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
129 *, path: Path | None = None, app_name: str | None = None
130) -> ImportData:
131 path_config_source: ModuleConfigSource = "path-argument" 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d6i]d^d_dqi`da b c EiFiS T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDd7iae}gbecedeV ~beefeacW geheie~gjekele8imeneoeriped e f GiHiX Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGd9iuedhvewexe0 icyezejc1 AeBeCeehDeEeFe!iGeHeIesiJeg h i IiJi2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJd#iOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe$i0e1e2eti3ej k l KiLi7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd%i8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e'i-e.e/eui:em n o MiNi$ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd(i[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcf)idfefffvigfp q r OiPi* + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSd*ilfxhmfnfof- ScpfqfTc. rfsftfyhufvfwf+ixfyfzfwiAfs t u QiRi/ : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVd,iFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQf-iRfSfTfxiUfv w x SiTi@ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYd.iZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f/i#f$f%fyi'fy z A UiVi` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d:i,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f;i_f`f{fzi|fB C D WiXiabbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4d=icgRhdgegfgdb[cgghg]cebigjgkgShlgmgng?iogpgqgAirgE F G YiZifbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7d@iwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHg[iIgJgKgBiLgH I J 0i1ikblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!d]iQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g^i2g3g4gCi5gK L M 2i3ipbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d_i!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g`i/g:g;gDi=gN O P 4i5iubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d{i
132 if not path: 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d6i]d^d_dqi`da b c EiFiS T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDd7iae}gbecedeV ~beefeacW geheie~gjekele8imeneoeriped e f GiHiX Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGd9iuedhvewexe0 icyezejc1 AeBeCeehDeEeFe!iGeHeIesiJeg h i IiJi2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJd#iOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe$i0e1e2eti3ej k l KiLi7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd%i8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e'i-e.e/eui:em n o MiNi$ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd(i[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcf)idfefffvigfp q r OiPi* + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSd*ilfxhmfnfof- ScpfqfTc. rfsftfyhufvfwf+ixfyfzfwiAfs t u QiRi/ : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVd,iFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQf-iRfSfTfxiUfv w x SiTi@ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYd.iZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f/i#f$f%fyi'fy z A UiVi` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d:i,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f;i_f`f{fzi|fB C D WiXiabbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4d=icgRhdgegfgdb[cgghg]cebigjgkgShlgmgng?iogpgqgAirgE F G YiZifbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7d@iwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHg[iIgJgKgBiLgH I J 0i1ikblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!d]iQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g^i2g3g4gCi5gK L M 2i3ipbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d_i!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g`i/g:g;gDi=gN O P 4i5iubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d{i
133 path = get_default_path() 2Q R a b c EiFiS T U V W d e f GiHiX Y Z 0 1 g h i IiJi2 3 4 5 6 j k l KiLi7 8 9 ! # m n o MiNi$ % ' ( ) p q r OiPi* + , - . s t u QiRi/ : ; = ? v w x SiTi@ [ ] ^ _ y z A UiVi` { | } ~ B C D WiXiabbbcbdbebE F G YiZifbgbhbibjbH I J 0i1ikblbmbnbobK L M 2i3ipbqbrbsbtbN O P 4i5iubvbwb
134 path_config_source = "auto-discovery" 2Q R a b c S T U V W d e f X Y Z 0 1 g h i 2 3 4 5 6 j k l 7 8 9 ! # m n o $ % ' ( ) p q r * + , - . s t u / : ; = ? v w x @ [ ] ^ _ y z A ` { | } ~ B C D abbbcbdbebE F G fbgbhbibjbH I J kblbmbnbobK L M pbqbrbsbtbN O P ubvbwb
136 logger.debug(f"Using path [blue]{path}[/blue]") 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d6i]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDd7iae}gbecedeV ~beefeacW geheie~gjekele8imeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGd9iuedhvewexe0 icyezejc1 AeBeCeehDeEeFe!iGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJd#iOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe$i0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd%i8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e'i-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd(i[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcf)idfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSd*ilfxhmfnfof- ScpfqfTc. rfsftfyhufvfwf+ixfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVd,iFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQf-iRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYd.iZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f/i#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d:i,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f;i_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4d=icgRhdgegfgdb[cgghg]cebigjgkgShlgmgng?iogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7d@iwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHg[iIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!d]iQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g^i2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d_i!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g`i/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d{i
137 logger.debug(f"Resolved absolute path {path.resolve()}") 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d6i]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDd7iae}gbecedeV ~beefeacW geheie~gjekele8imeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGd9iuedhvewexe0 icyezejc1 AeBeCeehDeEeFe!iGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJd#iOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe$i0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd%i8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e'i-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd(i[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcf)idfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSd*ilfxhmfnfof- ScpfqfTc. rfsftfyhufvfwf+ixfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVd,iFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQf-iRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYd.iZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f/i#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d:i,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f;i_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4d=icgRhdgegfgdb[cgghg]cebigjgkgShlgmgng?iogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7d@iwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHg[iIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!d]iQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g^i2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d_i!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g`i/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d{i
139 if not path.exists(): 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d6i]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDd7iae}gbecedeV ~beefeacW geheie~gjekele8imeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGd9iuedhvewexe0 icyezejc1 AeBeCeehDeEeFe!iGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJd#iOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe$i0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd%i8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e'i-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd(i[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcf)idfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSd*ilfxhmfnfof- ScpfqfTc. rfsftfyhufvfwf+ixfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVd,iFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQf-iRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYd.iZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f/i#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d:i,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f;i_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4d=icgRhdgegfgdb[cgghg]cebigjgkgShlgmgng?iogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7d@iwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHg[iIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!d]iQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g^i2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d_i!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g`i/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d{i
140 raise FastAPICLIException(f"Path does not exist {path}") 26i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i
141 mod_data = get_module_data_from_path(path) 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
142 sys.path.insert(0, str(mod_data.extra_sys_path)) 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
143 use_app_name = get_app_name(mod_data=mod_data, app_name=app_name) 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_dqi`da b c S T U =h]b^b_b`b{b|b{d`g|dBd?h{gCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeriped e f X Y Z @hbcccdcecfcgcqeahreEd[hbhFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIesiJeg h i 2 3 4 ]hkclcmcncocpcKefhLeHd^hghIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2eti3ej k l 7 8 9 _htcucvcwcxcyc4ekh5eKd`hlhLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/eui:em n o $ % ' {hCcDcEcFcGcHc;eph=eNd|hqhOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffvigfp q r * + , }hLcMcNcOcPcQchfuhifQd~hvhRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfwiAfs t u / : ; aiUcVcWcXcYcZcBfzhCfTdbiAhUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfxiUfv w x @ [ ] ci3c4c5c6c7c8cVfEhWfWddiFhXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%fyi'fy z A ` { | ei$c%c'c(c)c*c(fJh)fZdfiKh0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{fzi|fB C D abbbcbgi.c/c:c;c=c?c}fOh~f2dhiPh3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgAirgE F G fbgbhbii^c_c`c{c|c}csgThtg5djiUh6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgBiLgH I J kblbmbkicdddedfdgdhdMgYhNg8dliZh9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4gCi5gK L M pbqbrbmildmdndodpdqd6g3h7g#dni4h$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;gDi=gN O P ubvbwboiudvdwdxdydzd?g8h@g'dpi9h(dAd:b;b=b?b[g]g!h)d
145 import_string = f"{mod_data.module_import_str}:{use_app_name}" 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d`g|dCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeped e f X Y Z bcccdcecfcgcqeahreFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKefhLeIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4ekh5eLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;eph=eOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfuhifRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfzhCfUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfEhWfXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(fJh)f0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}fOh~f3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgThtg6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgYhNg9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g3h7g$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g8h@g(dAd:b;b=b?b[g]g!h)d
147 return ImportData( 2*d^g+d,d-dQ @b.d/d[bR :d;d=d_g?d@d[d]d^d_d`da b c S T U ]b^b_b`b{b|b{d`g|dCd}bxbybzbAb}d~d|gDdae}gbecedeV ~beefeacW geheie~gjekelemeneoeped e f X Y Z bcccdcecfcgcqeahreFdhcBbCbDbEbsetechGduedhvewexe0 icyezejc1 AeBeCeehDeEeFeGeHeIeJeg h i 2 3 4 kclcmcncocpcKefhLeIdqcFbGbHbIbMeNehhJdOeihPeQeRe5 rcSeTesc6 UeVeWejhXeYeZe0e1e2e3ej k l 7 8 9 tcucvcwcxcyc4ekh5eLdzcJbKbLbMb6e7emhMd8enh9e!e#e! Ac$e%eBc# 'e(e)eoh*e+e,e-e.e/e:em n o $ % ' CcDcEcFcGcHc;eph=eOdIcNbObPbQb?e@erhPd[esh]e^e_e( Jc`e{eKc) |e}e~ethafbfcfdfefffgfp q r * + , LcMcNcOcPcQchfuhifRdRcRbSbTbUbjfkfwhSdlfxhmfnfof- ScpfqfTc. rfsftfyhufvfwfxfyfzfAfs t u / : ; UcVcWcXcYcZcBfzhCfUd0cVbWbXbYbDfEfBhVdFfChGfHfIf= 1cJfKf2c? LfMfNfDhOfPfQfRfSfTfUfv w x @ [ ] 3c4c5c6c7c8cVfEhWfXd9cZb0b1b2bXfYfGhYdZfHh0f1f2f^ !c3f4f#c_ 5f6f7fIh8f9f!f#f$f%f'fy z A ` { | $c%c'c(c)c*c(fJh)f0d+c3b4b5b6b*f+fLh1d,fMh-f.f/f} ,c:f;f-c~ =f?f@fNh[f]f^f_f`f{f|fB C D abbbcb.c/c:c;c=c?c}fOh~f3d@c7b8b9b!bagbgQh4dcgRhdgegfgdb[cgghg]cebigjgkgShlgmgngogpgqgrgE F G fbgbhb^c_c`c{c|c}csgThtg6d~c#b$b%b'bugvgVh7dwgWhxgygzgibadAgBgbdjbCgDgEgXhFgGgHgIgJgKgLgH I J kblbmbcdddedfdgdhdMgYhNg9did(b)b*b+bOgPg0h!dQg1hRgSgTgnbjdUgVgkdobWgXgYg2hZg0g1g2g3g4g5gK L M pbqbrbldmdndodpdqd6g3h7g$drd,b-b.b/b8g9g5h%d!g6h#g$g%gsbsd'g(gtdtb)g*g+g7h,g-g.g/g:g;g=gN O P ubvbwbudvdwdxdydzd?g8h@g(dAd:b;b=b?b[g]g!h)d
148 app_name=use_app_name,
149 module_data=mod_data,
150 import_string=import_string,
151 module_config_source=path_config_source,
152 app_name_config_source="app-option" if app_name else "auto-discovery",
153 )
156def get_import_data_from_import_string( 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h
157 import_string: str, from_pyproject: bool
158) -> ImportData:
159 module_str, _, app_name = import_string.partition(":") 2|i}i~i]jaj^j_j`j{jbjcjdjejfj|jgj}j~jakbkhjijjjkjljckmjdkekfkgknjojpjqjrjhksjikjkkklktjujvjwjxjmkyjnkokpkqkzjAjBjCjDjrkEjsktkukvkFjGjHjIjJjwkKjxkykzkAkLjMjNjOjPjBkQjCkDkEkFkRjSjTjUjVjGkWjHkIkJkKkXjYjZj0j1jLk2jMkNkOkPk3j4j5j6j7jQk8jRkSkTkUk9j!j#j$j%jVk'jWkXkYkZk(j)j*j+j,j0k-j1k2k3k4k.j/j:j;j=j5k?j6k7k8k9k@j[j
161 if not module_str or not app_name: 2|i}i~i]jaj^j_j`j{jbjcjdjejfj|jgj}j~jakbkhjijjjkjljckmjdkekfkgknjojpjqjrjhksjikjkkklktjujvjwjxjmkyjnkokpkqkzjAjBjCjDjrkEjsktkukvkFjGjHjIjJjwkKjxkykzkAkLjMjNjOjPjBkQjCkDkEkFkRjSjTjUjVjGkWjHkIkJkKkXjYjZj0j1jLk2jMkNkOkPk3j4j5j6j7jQk8jRkSkTkUk9j!j#j$j%jVk'jWkXkYkZk(j)j*j+j,j0k-j1k2k3k4k.j/j:j;j=j5k?j6k7k8k9k@j[j
162 raise FastAPICLIException( 2]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k
163 "Import string must be in the format module.submodule:app_name"
164 )
166 here = Path(".").resolve() 2|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j
168 sys.path.insert(0, str(here)) 2|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j
170 return ImportData( 2|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j
171 app_name=app_name,
172 module_data=ModuleData(
173 module_import_str=module_str,
174 extra_sys_path=here,
175 module_paths=[],
176 ),
177 import_string=import_string,
178 module_config_source=(
179 "entrypoint-pyproject" if from_pyproject else "entrypoint-option"
180 ),
181 app_name_config_source=(
182 "entrypoint-pyproject" if from_pyproject else "entrypoint-option"
183 ),
184 )