Coverage for src/fastapi_cli/utils/cli.py: 100%
64 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 logging 1CDEFGHIJKLMNOP
2import sys 1CDEFGHIJKLMNOP
3from typing import Any 1CDEFGHIJKLMNOP
5from rich._loop import loop_first 1CDEFGHIJKLMNOP
6from rich.console import Console, ConsoleOptions, RenderableType, RenderResult 1CDEFGHIJKLMNOP
7from rich.segment import Segment 1CDEFGHIJKLMNOP
8from rich.text import Text 1CDEFGHIJKLMNOP
9from rich_toolkit import RichToolkit 1CDEFGHIJKLMNOP
10from rich_toolkit.element import Element 1CDEFGHIJKLMNOP
11from rich_toolkit.styles import BaseStyle 1CDEFGHIJKLMNOP
12from uvicorn.logging import DefaultFormatter 1CDEFGHIJKLMNOP
14logger = logging.getLogger(__name__) 1CDEFGHIJKLMNOP
17def should_use_rich_logs() -> bool: 1CDEFGHIJKLMNOP
18 """Return True when stdout is a TTY and rich logs should be used, False otherwise."""
19 return sys.stdout.isatty() 2Q R S TfT U V UfW X Y VfZ 0 1 Wf2 3 4 Xf5 6 7 Yf8 9 ! Zf# $ % 0f' ( ) 1f* + , 2f- . / 3f: ; = 4f? @ [ 5f] ^ _ 6f
22class IndentedBlock: 1CDEFGHIJKLMNOP
23 """Indent a renderable, hanging a prefix (e.g. an emoji bullet) on the
24 first line and aligning wrapped/extra lines under the text."""
26 def __init__( 1CDEFGHIJKLMNOP
27 self,
28 renderable: RenderableType,
29 *,
30 first_prefix: Text,
31 prefix: Text,
32 ) -> None:
33 self.renderable = renderable 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
34 self.first_prefix = first_prefix 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
35 self.prefix = prefix 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
37 # Text renders its `end` ("\n" by default), which would break lines
38 self.first_prefix.end = "" 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
39 self.prefix.end = "" 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
41 def __rich_console__( 1CDEFGHIJKLMNOP
42 self, console: Console, options: ConsoleOptions
43 ) -> RenderResult:
44 prefix_width = max(self.first_prefix.cell_len, self.prefix.cell_len) 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
45 lines = console.render_lines( 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
46 self.renderable,
47 options.update_width(options.max_width - prefix_width),
48 pad=False,
49 )
51 new_line = Segment.line() 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
53 for first, line in loop_first(lines): 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
54 if any(segment.text.strip() for segment in line): 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
55 yield from console.render( 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
56 self.first_prefix if first else self.prefix, options
57 )
58 yield from line 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
60 yield new_line 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
63class FastAPIStyle(BaseStyle): 1CDEFGHIJKLMNOP
64 """Uniform left indent with emoji bullets hanging to the left of the text.
66 ``emoji=`` renders as a bullet in a fixed column; ``bullet=False`` drops
67 the bullet column and just indents. This is a small, purpose-built subset
68 of the richer style in fastapi-cloud-cli.
69 """
71 content_padding = 1 1CDEFGHIJKLMNOP
72 emoji_column_width = 3 1CDEFGHIJKLMNOP
74 def render_element( 1CDEFGHIJKLMNOP
75 self,
76 element: Any,
77 is_active: bool = False,
78 done: bool = False,
79 parent: Element | None = None,
80 **kwargs: Any,
81 ) -> RenderableType:
82 rendered = super().render_element( 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
83 element=element, is_active=is_active, done=done, parent=parent, **kwargs
84 )
86 emoji = kwargs.get("emoji", "") 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
88 if not emoji and not kwargs.get("bullet", True): 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
89 indent = Text(" " * (self.content_padding + 1)) 2` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobwepbQ R S qbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbxeKbT U V LbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bye5bW X Y 6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=bze?bZ 0 1 @b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjcAekc2 3 4 lcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcBeFc5 6 7 GcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcCe0c8 9 ! 1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-cDe.c# $ % /c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedEefd' ( ) gdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdFeAd* + , BdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdGeVd- . / WdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(dHe)d: ; = *d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dIeae? @ [ becedeeefegeheiejekelemeneoepeqereseteueJeve] ^ _
90 return IndentedBlock(rendered, first_prefix=indent, prefix=indent) 2` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobwepbQ R S qbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbxeKbT U V LbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bye5bW X Y 6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=bze?bZ 0 1 @b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjcAekc2 3 4 lcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcBeFc5 6 7 GcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcCe0c8 9 ! 1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-cDe.c# $ % /c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedEefd' ( ) gdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdFeAd* + , BdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdGeVd- . / WdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(dHe)d: ; = *d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dIeae? @ [ becedeeefegeheiejekelemeneoepeqereseteueJeve] ^ _
92 return IndentedBlock( 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
93 rendered,
94 first_prefix=self._get_bullet_prefix(emoji),
95 prefix=Text(" " * (self.content_padding + self.emoji_column_width)),
96 )
98 def _get_bullet_prefix(self, emoji: str) -> Text: 1CDEFGHIJKLMNOP
99 prefix = Text(" " * self.content_padding) 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
101 if emoji: 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
102 prefix.append_text(Text.from_markup(emoji)) 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
104 prefix.pad_right( 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
105 self.content_padding + self.emoji_column_width - prefix.cell_len
106 )
108 return prefix 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a qbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b LbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c 6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d @b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e lcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f GcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g 1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h /c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i gdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j BdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k WdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l *d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m becedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n
111LOG_LEVEL_COLORS = { 1CDEFGHIJKLMNOP
112 "debug": "blue",
113 "info": "cyan",
114 "warning": "yellow",
115 "warn": "yellow",
116 "error": "red",
117 "critical": "magenta",
118 "fatal": "magenta",
119}
122def _get_log_bullet(level: str) -> str: 1CDEFGHIJKLMNOP
123 """Colored bar rendered in the emoji bullet column, matching the log
124 level, like the ``fastapi cloud logs`` output."""
125 color = LOG_LEVEL_COLORS.get(level.lower(), "dim") 1oapbqcrdsetfugvhwixjykzlAmBn
127 return f"[{color}]▕[/{color}]" 1oapbqcrdsetfugvhwixjykzlAmBn
130class CustomFormatter(DefaultFormatter): 1CDEFGHIJKLMNOP
131 def __init__(self, *args: Any, **kwargs: Any) -> None: 1CDEFGHIJKLMNOP
132 super().__init__(*args, **kwargs) 2o a Ffp b Gfq c Hfr d Ifs e Jft f Kfu g Lfv h Mfw i Nfx j Ofy k Pfz l QfA m RfB n Sf
133 self.toolkit = get_rich_toolkit() 2o a Ffp b Gfq c Hfr d Ifs e Jft f Kfu g Lfv h Mfw i Nfx j Ofy k Pfz l QfA m RfB n Sf
135 def formatMessage(self, record: logging.LogRecord) -> str: 1CDEFGHIJKLMNOP
136 message = record.getMessage() 1oapbqcrdsetfugvhwixjykzlAmBn
137 result = self.toolkit.print_as_string( 1oapbqcrdsetfugvhwixjykzlAmBn
138 message, emoji=_get_log_bullet(record.levelname)
139 )
140 # Prepend newline to fix alignment after ^C is printed by the terminal
141 if message == "Shutting down": 1oapbqcrdsetfugvhwixjykzlAmBn
142 result = "\n" + result 1abcdefghijklmn
143 return result 1oapbqcrdsetfugvhwixjykzlAmBn
146def get_uvicorn_log_config() -> dict[str, Any]: 1CDEFGHIJKLMNOP
147 return { 2` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpb7fFfqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKb8fGfLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b9fHf6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b!fIf@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckc#fJflcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFc$fKfGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c%fLf1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c'fMf/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfd(fNfgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAd)fOfBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVd*fPfWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d+fQf*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~dae,fRfbecedeeefegeheiejekelemeneoepeqereseteueve-fSf
148 "version": 1,
149 "disable_existing_loggers": False,
150 "formatters": {
151 "default": {
152 "()": CustomFormatter,
153 "fmt": "%(levelprefix)s %(message)s",
154 "use_colors": None,
155 },
156 "access": {
157 "()": CustomFormatter,
158 "fmt": "%(levelprefix)s %(client_addr)s - '%(request_line)s' %(status_code)s",
159 },
160 },
161 "handlers": {
162 "default": {
163 "formatter": "default",
164 "class": "logging.StreamHandler",
165 "stream": "ext://sys.stderr",
166 },
167 "access": {
168 "formatter": "access",
169 "class": "logging.StreamHandler",
170 "stream": "ext://sys.stdout",
171 },
172 },
173 "loggers": {
174 "uvicorn": {
175 "handlers": ["default"],
176 "level": "INFO",
177 "propagate": False,
178 },
179 "uvicorn.error": {"level": "INFO"},
180 "uvicorn.access": {
181 "handlers": ["access"],
182 "level": "INFO",
183 "propagate": False,
184 },
185 },
186 }
189def get_rich_toolkit() -> RichToolkit: 1CDEFGHIJKLMNOP
190 return RichToolkit(style=FastAPIStyle()) 2` { | } ~ abbbcbdbebfbgbKeLehbibjbkblbmbnbMeobwepbQ R NeOeS Peo a FfqbrbsbtbubvbwbxbybzbAbBbQeReCbDbEbFbGbHbIbSeJbxeKbT U TeUeV Vep b GfLbMbNbObPbQbRbSbTbUbVbWbWeXeXbYbZb0b1b2b3bYe4bye5bW X Ze0eY 1eq c Hf6b7b8b9b!b#b$b%b'b(b)b*b2e3e+b,b-b.b/b:b;b4e=bze?bZ 0 5e6e1 7er d If@b[b]b^b_b`b{b|b}b~bacbc8e9eccdcecfcgchcic!ejcAekc2 3 #e$e4 %es e Jflcmcncocpcqcrcsctcucvcwc'e(excyczcAcBcCcDc)eEcBeFc5 6 *e+e7 ,et f KfGcHcIcJcKcLcMcNcOcPcQcRc-e.eScTcUcVcWcXcYc/eZcCe0c8 9 :e;e! =eu g Lf1c2c3c4c5c6c7c8c9c!c#c$c?e@e%c'c(c)c*c+c,c[e-cDe.c# $ ]e^e% _ev h Mf/c:c;c=c?c@c[c]c^c_c`c{c`e{e|c}c~cadbdcddd|eedEefd' ( }e~e) afw i NfgdhdidjdkdldmdndodpdqdrdbfcfsdtdudvdwdxdyddfzdFeAd* + efff, gfx j OfBdCdDdEdFdGdHdIdJdKdLdMdhfifNdOdPdQdRdSdTdjfUdGeVd- . kflf/ mfy k PfWdXdYdZd0d1d2d3d4d5d6d7dnfof8d9d!d#d$d%d'dpf(dHe)d: ; qfrf= sfz l Qf*d+d,d-d.d/d:d;d=d?d@d[dtfuf]d^d_d`d{d|d}dvf~dIeae? @ wfxf[ yfA m RfbecedeeefegeheiejekelemezfAfneoepeqereseteBfueJeve] ^ CfDf_ EfB n Sf