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

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

7 

8from fastapi_cli.exceptions import FastAPICLIException 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h

9 

10logger = getLogger(__name__) 2#h$h%h'h(h)h*h+h,h-h.h/h:h;h

11 

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] 

16 

17 

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 ) 

27 

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

32 

33 raise FastAPICLIException( 2EiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i

34 "Could not find a default file to run, please provide an explicit path" 

35 ) 

36 

37 

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

43 

44 

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

59 

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 ) 

66 

67 

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

104 

105 

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] 

112 

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] 

116 

117 

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

123 

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

126 

127 

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

135 

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

138 

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

144 

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

146 

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 ) 

154 

155 

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

160 

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 ) 

165 

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

167 

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

169 

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 )