From 32dad3e7890c38f2989463f8d6bede989bc4f877 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 11:44:54 -0500 Subject: [PATCH 01/18] Replace Mu's splash, window icon and Mode logo with Nu's The splash still read "Mu: a Python editor" / codewith.mu with the Mu logo, the old Mu icon.svg won over the Nu icon.png (load_icon prefers SVG), and the Mode button showed the Mu logo while the mode picker told learners to click "the Mode button containing Nu's logo". utils/make_artwork.py draws splash_screen.png, splash_fail.png and modes.png from icon.png with Qt, so the art can be redrawn when the icon changes. The Mu GIMP source and base image go. Co-Authored-By: Claude Opus 5.5 --- mu/resources/__init__.py | 3 +- mu/resources/images/icon.svg | 33 ----- mu/resources/images/modes.png | Bin 7464 -> 45670 bytes mu/resources/images/modes.svg | 107 -------------- mu/resources/images/splash_fail.png | Bin 25480 -> 47685 bytes mu/resources/images/splash_screen.gif | Bin 49635 -> 0 bytes mu/resources/images/splash_screen.png | Bin 0 -> 139220 bytes mu/resources/images/splash_screen.xcf | Bin 1338948 -> 0 bytes .../images/splash_screen_base_image.png | Bin 33732 -> 0 bytes tests/test_resources.py | 6 +- utils/make_artwork.py | 138 ++++++++++++++++++ 11 files changed, 142 insertions(+), 145 deletions(-) delete mode 100644 mu/resources/images/icon.svg delete mode 100644 mu/resources/images/modes.svg delete mode 100644 mu/resources/images/splash_screen.gif create mode 100644 mu/resources/images/splash_screen.png delete mode 100644 mu/resources/images/splash_screen.xcf delete mode 100644 mu/resources/images/splash_screen_base_image.png create mode 100644 utils/make_artwork.py diff --git a/mu/resources/__init__.py b/mu/resources/__init__.py index 5b438bdec..a63637ba4 100644 --- a/mu/resources/__init__.py +++ b/mu/resources/__init__.py @@ -143,7 +143,8 @@ def load_pixmap(name, size=None): def load_movie(name): - """Load an animated GIF from the core's (or a plugin's) images.""" + """Load an animation (or a still image) from the core's (or a plugin's) + images.""" return QMovie(image_path(name)) diff --git a/mu/resources/images/icon.svg b/mu/resources/images/icon.svg deleted file mode 100644 index fa6c98777..000000000 --- a/mu/resources/images/icon.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - diff --git a/mu/resources/images/modes.png b/mu/resources/images/modes.png index b9080ab06ff42b14e643eabceb55ff9bc9eb0d5e..b362311ca5b9ec60c3f6f33c97a1b73dd2604266 100644 GIT binary patch literal 45670 zcmV*kKuf=gP)jvHpv1Zn?gbegb)G=EWH?P;~Do}#^dQ-BWYB>a_%1*93Vgp z){I>AdmcUVXr%YN)_mvv&N*)r2E-&TocPQq5IfnuNpC`QQivlK;u8*l*5 zH#{6;Vp2fz4UZHMN5~;y5Ge+LK_LCC*qxZ#5!&jz#fKlVChmWmBh!d%E0E*(klPzd zNjVx3vH>BdA;lzM5>OB5SyIaY+JGYnc?2mABE=3IsqLb1M}L-d%JCk^8Gw@vDG_X4 zP>ZE5N3rK4MI+D%lxJJF_ed|W9U-@4E89@5S6Q&NT?k~h70dBwat0vFj4k2kA>>M6 z<=Asow)Gk(I+5ZPU_DZ-r>%ZxZVQoJat0s^$c;;@(T$6d;u2sj5XiPpSt1NPhme0l zwf-dLZ|};sLT4H|126%|2d`0?+`0_7WbDzHWtC1=wgZ0x{zU8K4Y}39_>(gL})G^I+8O08D#7L?<{QPBfvF4Wwv!X zP3Q(5La~3tf~^~K2Z@;@X8<{UuCd(q6F=Uj~^PR;_{h0chFQ=?udF9tD2PqLycJTZH#V&H%he&H(%sWb>kV zz%9VF)V?m3zIG(r%A5?G@diMyU*X4{7oUsN# zN)(!#K8=vKlMB;5Q|U#>ud;B<&(G92f-}+p$jwbF5c2!L!ffl3b)c6AF$Lfh$WjlvaQN^a@raIDG@X`eF7nW0Qj@5&vD_Zg}_as!{sk=z$q2l7@! z!FlOPuQ>ktXHIAARN5E>pMlVeV8ybn(L2$Fke?Kbwmg?@MKZ~0V*q6HA|1G$bmGp* zg>XQ@IZ$vxZqmOS$Be;K5PTkFD%%>p9p47NDw~WCkMU2HKM6yeYO=j5l-2wQ%VF|7Jd;az743^ z)(6!OC09e~M?f#mwl=3H#vt_n1_pi$)=3eTTvIHLeiirPuan1{gY%B6!Ipqw1+_InqDSnR> z%d@J8UIgXWLCKZrL%tjnkDW@N5%m5y7(?0C<`oqCgJR*1{#p&%n%T82@3U_`s=DbmWvV0CIEF8if2EP>>Y` zgaW14Ld6YfUw)304=V;e_dx&sAhVXN6hw*-iN(z?WJ`hf!YN?@XlPHF=nTNZu^DgIwp1~0xGs%}p2`E#7Q zm?O~jeHi>hwlw&XXll7LTZ8{KPD%qXmcRc`z`suT;O;3<`&IDeI(VN}jBZPB3*v_- zerzeeMpN_cCu6L@NoN4YCjU2pTPJj2p+V*6pzPX-E3A=YVv#2F-4ESAO8EK z)cm!R%?O-)2B3M-*O=%#zoQbS{0DeuPw22YvP5(bwEiQcx+ivADZVBaH-BSd2Yq)= zDg%&}J%9chsQ>3&vd)=?6^6ETF!JI=k9<;{37j+rKyGfj4k7QIumOb%)nA0tzu_eM z8gfi168e6f_7q5K0*4jXpDf;ilj6!B^Yh=&MCs!whspmA-gy%;T#l2R=+3b%!GzT= zlt^*y$q*-ybptRK;rA31737n*3hLLTef&9cyp9=ywy#5I!m@h}Y~_5hWb=gYLEcDK z4Zv7z{{|)^yjLht^#v&VIJuyn9B+>eeZPdRA52szaS$n%WixjmYX(4WSx|zlY-A!5 zdlV;3z60`Bj{8tKP6I+OL+d}Jvkk|e!@yahsbz2?274=6xfROi*SL`4_e{j(SN$;U zzjBj5$MKW5Dt*nU6H-ln3h;aR{FG2$CCFwcymGK+|CSVIN)~oNCaUCSE zG;N(lb}ELQ3cNmvrIZX057X1rfybp&;Pv2gx)4HQS(0FInBhp6lwsra_y`2@DK0L> z>-A>)zi{#(Q*h`@{(RLn2N8Yn1p2$Gi}1L1iHhG+vCOU z_TcmRal75e#yI0v2v!UZ+&JC`gIzdM^F+hW;CKx%Zhy70!XCe2JX>_TYGKAta;N=o zK*~SYn}|lE#N#nWfsM>0pijonMz@yBBj9T@ljq;h2NjftvI6$ffV7#e0_Z3RUh7f!DS6csIQ5U?%eV35$z2nka%5|7gviO@DWg5}nzoIaho z%a&3@cnm5EON?lgvlle5?N|5X4UM7$9*-Bz;X-jLsF;ifgA5G~F%lUi z95;x&oK!4Yz(qIz9oxElDJrjH_3CrZJR=Z44EwJi&whmwY-NsEvbiJEf;0Y?k`h64 z)1wG^S*B$J>BOFCKgt#DJccBZNYdVZn1D;gm5kH;#M38P1Bg~mLiMH1^a_24oL}&9h z>U>_#nm>;fOBUeC_mMITOes-nCljojicwn0Xf#H3RXLGxn4P=#bF`x!uiL?bg$+o{ z!nSREUN5!~P-s0thI_$GlJJIOavs2bqX*)=#s{dLzP=PzRW{{38W)ki5SI|H|7 zp_k$Cm&Y%aSchP!)+~BuK{Nn3e(gMTF|7Q*iDDeC2Dmp=c^~b#?sq z;fJ~V?z_14)_>qT-?;-RprgH$`|kS{JGSq_?e%cg2QTB}%a^g~KklH>Gzn-R94dI+ zY#a`=>Yx5E8+*Dbt*vGLlCvo)Is@CJ_x>W?hhUtfqgu1Xf^8XVfT(6l5WsDJTYD#h z)tQuejJ#D)`xQ=tB1Ty!J^2SoCF2x0RqkK+FFgL;AF{BxgljLpkcOEvaB2c4CdSAx z$=(5?{R7yMDCS6*-nKTLefk+1r%qu`RRu+g!nup)V~2vMi70-*4_`qc-}&};nLc9{ zH+=R+BB2n!xbJ?Z&7MVNVLqX~yC~2V6lsEOqZua8J@+Du&psR5q0uwgi=ycG{Q(r^ z3<}Qj&4bupNREqVzz3pW-90^zXG&nkA_3**rWFWzL#E`t2}gOlj90Fb4*;Q1h(sbv zncKm)KYIgR&pgMajq|wbst*wl4q?Wlh0gV?bI5`irRs_vjbk<<+i)4Sni z`b`7FvPoJNwxXdrb?Vlv!sqj|>9s9<Ovw5Rs{c0>oHs6_Pc=-_VDH}D)K`@7>`#8otM~qlOV+Gn^+gvEkA@J57?F++ zM%s=-G=`NjFii{7l-L&74kvnD4Th?tCzD_pfC09Nv?Zz{(S+c@!GpN!Cs8tW8n15J zOzV*&D2hTu!#rwhYx&hLe}(0Akw0q=RSOsK#4jJ9#_z+WfX}H@Us-}Tnc(S%euvZT zrF3!~+jeiKzJ3}mw>#Tk)fd`o$@N?jmSFu!qFf6PaiSR(ied8jo&zkr`3rRV zJxrN3pS5c*JcHbW5)R)oUd=~(Nw}tqm9Lyo@WF|1s$Gd&8IQ^Ds7!b4$xVJB9m^jL z50M%Q@{@Jnpu`qjebp5tV-Z}KB>MUoJ#rWki6V>yDKmvFY%JTvvMi*g5i2ev>2dSl z5B;8?VKN#|Vww`emKX>O%fw0~@EQhH1B1N$t?zR1vBxQnj$$0xNApjAin{4FLJvH^ zsz`_h-96N|9;K-uA14y2!bo8ev%mH)>_KNV6ybt7(;3>nl_{m=?B2PRa5yWiy0e6U z`md+2<;+u#Gx?7vD&&L=fZViX67csYs>EL)G?@G!xprM+NGWM;JxEz$K3!Y3(6OnR zvt~}m>(sF0F;c-{2KViQP#984Y{Nj97T6Y=CUH1bY)xPl=JDFgFOz8Rq}bs?q7pMq z47U&8St|(U7ZX>VSV@aYbk?XY+%K*t_Pd8k{Ptl2FTTLpMuhXri7X{y2}mya~na!0q)=S5t?OFgg-pcsMJ?Z?lIQNMFn2(QsDCFOSW^ z_sxlErJ3uH!g)e6-j2%8rL+8U93v48;c^DJ`_3OwtvOgSuYpM4FmA7d{?=Bs&3twRc5zT>CSVC`iH${q|$e|-`Nh$>c10zJee(L`2^KAV2FUjj2 z#H*T==`Jct^U%CbG*v;h4AfK#JDMb!v~VaYPNx7xAf$zzvgv#I750sUxoT<^GMPjx zDaBJ=&8C9~L8y!bgK$EZ>?w$McKVvme0+ct)w&J%)cY0iz72qEUNjTQ$KLPf-x2qe zbc^mB$B0BC6b8KX?B2(o^_#eU_1P2@7LkaJ5^ifJ+1&>z12bh}ORx-yt*Q9yC*hkh zlVN{=yy-I;&>U3e=hG2zqv--gfGt!s!{VvCe@ba*H}kK#nj)_s84e@EVQe#nX_%O) zB&pE|q1INS?H!1C6u(2o>(tR~8#^VDmZZq(VRca{(LX@4 zx0}(PZj_M`lxPAW1-8qHQc{ScuA2P1NqB0ic&eoZ6b-k>gFTkGbVf~nNMF;nx29c# znMFa!e}?yWGk#w)O}@5x4%i=kKc9V9iZ9P4`MiPG{r;ig5K{wH9NDppY5Dnh6tLoP ztdSt8(HJ5rF;WsUX@M#zo;#Ps+y(*{U&5}#he>sGV%d-~Ov14^^%q{ik$diDhH0T1 zNo-UKRGkKwm)^lJ-JN|Le0c*FCQg?FQ%a<+W9T|sQ7Hv=HI&v>Q(jt1<+5e?0$$ug zAT5=+v=|zVaA+jL`lp`d;!7@K=0nltF!YB^Oa2?V zWx+SZ!maPQI?4OH)hhPa$@KBO7J#aoGb-|QAQp?EX&Q-0gpnhyEUzg=nkf|9CK(z9 z%LXLUu!$!v3hHWzR#Z}T$>lt^Z3_uSL3iqDV}eA{G(vtq%l_dXX@B5;+#NmWF#}R2 zK5QmyQ0Z|Z6%Ad;u}Bk}q%9dW3_{%<479be$F|w1YFIum&cb|rJ{P*85|1V58Vb^_ zXnga#-{z6u|CU*E<`IsJ;&Hi|K7HnyIr(3w`eq2d0A@zLAp%?ZI`EPA`oZ^X0A%x` zd5lMupQ!)LJe>?hc~6|1KoH4(=tZQLp- z>9al1G%O^RgnR``Oq*I;l1Lc@lLiB^II-SdgsPx9bP5X!S$N?^lrCAsBai%+^4eMy z-Ob?OAfNiwb!b{f(@#!4wEXmq?&!Z|TJneG=B9rYi<@`7Cw1P(K)1Y)&%8Un1}Gk% z@&TtZLI{${BwnwF(IX+0lu4e~g-ngb_S+I$rVD*aY+MET#L7yTwsIvi6`S*iL)>xu zH@WW9A7|S9c?^U@1cO0#Y}?6^!yO!*HH}iQk2zOeNu^M*`}!f309C=^aie*>*iILg zs-g%9GQH9;<1wt!Fp+^Ek&$6k0nWTU0(G_MWtBX;eLF90+C*tpH3*eRB+5rV`Y|R= znoKUPgY;H+@DC8(ky*Jy-U593y?o?7834I)X*HOcJ)##%`fwzd=<~KDlS!PKPAr+i zAwe@GW;BMPXjs-*@d+srii)E!A9eC1n)mKxB$;Bt>J=_{kQqLrFTEDr(=saZbi%SMl8I5IWg(CxBVjb38#E0C6GgF+szlKQ zwyxkVE2gWb2am^xq9`Pd6w@0U*tK^bk!Xye!63JNeI3)LPNlEEA0Y${4Gp9WgS~rp zv1#M03=Z@oBnG(V|66fSgVMi&zF%chs*b7M1RQsS;Bil8xp8R#X=XOzN6Uwb@yQ@QU69yB zg2Om$8^abPV^N&KM)$Z;kZ2m%QlJZkq-Ej}uxGZ0nmH{ zvFxm6R8?0U%hR`Q8%0s5tF7gN3ofF){V2g;kW|XR>2NR-3bJ#@4s0nI9Oy??Ra8|) z(=>F4hQsLs3CVbzSUg2>X&K9xtzh=-Ilvj{@;hECJ_|#C1T$mxJpgW$>sNf^cyk1f z|8A~Y*8!Q0%`N|QuAcv2!SD6c8I4k+tEf%~iKKyB5um0I(}W_>bb+R-#1l!($S8?O zoUNN)qo=2r{=R+|uUf{cOD+P_B03tuvQ6GNC*N4GLs1m!>guVle{;Crs#UA8Z5z`x z0hx|BAnmGDRrOe5QbkeFG!0c%a})osp?aYFQ_y*5CZ*=#j$a3S?|9yPTm~SW?=Lg! zqtlC^({TRuCD$a$9%hqtE%d;$^CkVp|`&GjopWGlm9p=xd!@v z3C2+7WJ>WxDf#~K)C)Miled;d=K=L6sMeb)zYY{vMn#^EIGt{!rW3QFZ2DBfMiNun zm_`yiX<*wjJ<*ZqLNc&#FK$gEl1viA#?Vz}FKpzA-#^M#mwtfaq5>ZK!|xd#jl8Le z$nhYAcvB~!w@&giwoA~7ptzv?Z!;~mp5~@=k8Akj6!@7FQ06ajltRgs85McD;`Ms* z`tlh_B$%{#KHVcBY{SGz#1NK=v`qk11zecK_U@+6p<^YZsEUHBJGksaS2EJw!}e#N z<+lHG3uPsRT=(fuvTtuXa7^0cRK+&O@lo=@^qj~fLLS$g{i{(Ka^uo66#E`B>8Go_ zF&!3}Ui2Vl+P+3_`US8l$W9FDZgbG4Hcta+oPQUH* zC3mm8t1tR)Z~ChS;I_|Jd>+At8BY)moSis5gQ8gtGj-Tv!IxdeDO={eqlYEo_d;!%1SQ0B_?r(Y*q(snD@l&8E zQ(95>G00nyF>z-CLMX)IaR&PPm^o(-J6?Q&YKIe&DNLD;*O#`yG{H7Zyt>ALLx-8# zw1}VI{~K=p*MH~ZpTCKk=`&by_0{zC_44cQ-^q>*8>y|V;<76)qo%5Yr~c=U{ObOn zF@1i*XE7Ph{x!;?-xwN#!96yOo7}BOa zl_b?Lhng!dXYth^#}~*uHdb#}Cx>5K&nr(p&CU%Q(RG~}O-;;SwE|CJfV~F}5)8+f zK6f6g*PKg1!JoS?=ZwKPVhqC0OF^2Mld0It#lo%cxVL!M6~Jwusk#L?D`UzOT?$1P zXH49wz&p9bUVr_qZnW2V>t_Oi0I_%iOA+99pxPE@cP}!QK$+{v^A1?B==0pJ1fBhpDyIELhk;B09?B ze|nsr-d^(Z^KrS{sISK#WWW%-lPmG{#~V2#43Fx8WEaE_WKO27MArSd`+wf)*Y6ky zkoNs&IP0(Es*H*|6);Vc;ovZ#kr7POz?L?es)Dq!<)7VVs;c31y2#JZ$D~Teod5tJ z07*naRPXoy#RV^=q_nh*SR%^Sjw8%ky_&Woo#aQ7`0ON#Wg&G7TUAj6cr}=;JBW`A zvvb|8SkY0MKKdziRWLZvgK1hArp^8LKY%F8=boS4%a#qV^5lcR<-TuykD}rt7N2_# z=d4{rUR5=lUwx5%`}ec<{7X1%+45sLy_bpk*7wI^F@nKihKC1fZ||U|w}+v@K{QpP zvZ8{<1q+xyeI~lDk9|IESYoz4M?-Ud8j(aDD4Il7B~np{q0nL4 z#Ah{7v~($INfE;5VMoh$c5T_lzuxh0^o@ql6$O_i33qn0?d4b5{_=Xjrfk|&W-UF7 z>e;gh#u9Y(4^UQB!J=XE(oeaSnC;iaS5aDnL(@J5P7M2mmHjQ+2p`AX=v@M%R zB*MTzFP&XI3=IV_rOosivpHw&TBb~ydQA4|xhjyb=cAb}9kxm|wXA=;U%ayc*xd93 zg#3KQRH*q1l)mSB1*Zg3N-WDF91hVx(2L*Wq|onTw6Bl;j&24zjxu<(oum5?6A2Cz z8VRD>0$ovX`aJlGiz%+EqP(t-vdNPOlvm&@Dnij6M3Qm(2Zl%_QWO`LU`xrNL;FZ1 z67;nl=A613MxJ<<!05jgHdQ*@3PJG-)#$3NqB&N4S50q27MN{ryBk5lquS(=@z3KY69a zl+{#IQeB6qFpti@el~Ayp{%Tu^Uk|~$y27H>-y0(!IIy3Me|n4;AN?c4M>=rX z79~Cp)dfZPoDK@SK70-hO$baOiN@okY>R=>2%X_5QB}oNS;6GSM&_Thmdcq^NvR5> z@dQ1CgKXTencaK$GIi=?{JO%*+8Xi>v~l>+$Enf;A{7G#6h)v2iK1#S)*CRKg1(eV zYb?fSem)gTo5-Iv4Nr9y`Q_!PnuhMwDRlez&G&vpZCyQAeEeGaj~wBTzxWj|J^2il z0xK^(mvgTE5Gjv?mL0pf;NmNoJNM7++Y*Tc&%f|2r6na)l$X$P-~dPV?qT1S9qeju zVYH`@0$`Fq55Ee!X`*W?5{MZF;be?a(;}(rxmg@pzoU z!2!HpFM2Y{feo+n`~$zHtGNZQkz!J171L^JsVFSO>vZB!6l~K#wQOR;!x%;!km=Gp zDj0@MEM*XmMj4JJ8H&XjOc|H~ANez{@!^EA%x9@J!%R6K@LS8?i2u*Y15hDE}LgoLmu>9tIv0WWzCv#40S5NCA_n$O4R zK#>3b-VeC@!3XGz45vE)n>OLjPMV*7o=s0ZM`3Xx3oc&E;tMaLePD>8&lPCfV z+hR18WH^?fH<2Rj_2Zi{gPG@?jVLH!aO2X4*S&{Mtx`Qy_yJR3+U2?mD=g$Ai8D4=soGmqVM7e_a2qOKr7Q$quD<~NdG zP>3CkVFX7oBT>v$0+~u-#$yrpVq_|xyZvLmYzWh!GU>lH`^1P}C8lC~gkr8nx18r?>cwGWD z7N+G7kMqla`wwayI+uUoV&*SfhU(O?O^Kb1lj!Ru+1pPt9L9>pNyZb1qzRUVz(OkN zoPNYugAD|VRFJlU&^4sA0YN-vkVqKxjYio&IK-jRQA!pzvicJr#a&lJOn|PsF^nW4 z7GqXPF^3*~jDrt7LXDz9JORl#Ze33&4hVswrnCGshlWIu6c9ns7K<_H^-;NGDTR%* zF#`d#JU@!=z@ezP44eP@+Sj@Cvdft|eG2#e=a1+e7^LZfbD6w!5jY)ee&H3i|KU%} z@Hm-MTFlvN*D$qVKGyIE!v~MTNSNVhgr7Y22T&b2oH~Y?!Za+({4TD%;B2(fC`uxR zkYHLi(lSXH27L+1YrTWC>pB%?ZtE&@_3(Ub@e*Nt``Q7(^#Hy*2`ScCf zF?G>=&{eEhg6LpBLr2>%Lm@QVOdnV&0=L_Z>TrORn5K!1jcu7o%fvQJtW^48m#BM zp?6>aBbh=)!L}_BHo7WMRj{Q*krE9Hr+`9-n?TAWc%YTmEjzGB<0xYVM^sIt`T1Aq zXlv)1&wrMb&&~W*D+vz{v*pG0q(UJk&76+c>towXFR`?`l44DvZQnlj?AXJ|;1H!A zFIFQ5wcR8_~PJ)RfJNF)>qN)s+sv;8!6bsChfwVxg6-qo_RMX<6 zm)28MRLZnDvw8BlXP7)?I)S{rY+oiPj!@H{fcT+INi4tZbEWsLyQ}X_g+l&f1t41% zeg-M-$<(N)%kp1J$sY!so9=XFz(=O^HE;?-4TEKWQULQ07y6a)&WBE2#|K}t|j zu*QO9giug)ol(P}FO{HWZ~*tb1{ywa33^ExacK}wC5cC)lscW%I^B%4Y+?Ad7Gz&P z-c%H~B4I3mNJs!dy6~8Tlx35Ug1D-2bTmTP=ceY|vkAP+;8@+@5q-+bM zO`*%p)+e83GrazyNi8^I4eK-34C+s zaAa_Z|Mi*A63ELx^|u3=-Uh&DL{rPXZ+zh|4M6jvM}W-a>MCw%eD<_h{-;tY1_yi5 zLxbFX%U3w^+B^hvy;3M|H! zUSsmlh&u7CbV@M{-lAHN@APoZHbgB!XAqc zQx$BXVAztRCTLGY&}K}d>io5&$|}gOti%K?%SP1%KGi|8t(}Me^9K}9s-y9u^BHXK z;ORT>X1ddbZjvrzo{TYP&P>+t+C$Rm;=C)bV9|mF1P|=P935exw;LUWB999t9L5}t zBP^LVib}c)686}(z~|+)wl;bkI;;NfMur1^I)fp;bjz*BikFTfh<>5qo<4(`v(Lsmc`~77ig+}EG{8<-NXrB%K}a+q zajFu(CaCbaaD*fD?mK|n<0h^sXdWMyZDU#KScsy4pWW*>kQxk9P*zIytXT{M!;E(K z;E~`I;LruJWRjEu7k%Pm6zBQb^3?y({Msfq@7&G4_AU;$cd_qC2gA_>Zl@c?vQec3 zRU#1Bih`y})Kr{;fS-|(AP4sCXI9f95kiIpw?j3L)s~>ZH7+fQ=9Rniuc7oAc*4uyXY(9DW~W zG)n81ZR|gMlqXxZ(H)IqD>^AD(~8NOoHXzR@^CoZ*tUg&M4ErD1CWlHw*VX41R*85v?=pAsc(!H1eLYb z)X$iS;`Fj{>oyMe_A`()i02njziJhE^>u_(2Jv_jJ7prI1yZ643tg3HDriFDRaJZz zv~Ayk!|f*Ja^dg?kP=eC5$^i;JE&`1NbS5v9{<@dnYo~W^2w8V=8sQN>2c!}HUb!l zMw!|;mx{V-o_+K&w(L8|h+z_w5=$u9fURf@j>hR44pLrFh;F7MDutR}322IqE(Bh; zlW;UnEMXE123fRrEll8&w$>``Pv1ph?*HP~M@-55@1o+U0uEbGXgsQ9T+t^Gn6yvd$E#S~m zM0!#q(%pB3A}~x7O^2eQLQ2cZC@U+&@AsqYI;yH+TQ*oW9u*v#jze=IHJxBQ$-d5B zT6_8^Ei0oSFMw^!^h&@okyd&|VA>L4*+|<&3Q(}|>N@2(R95{T0yY9J{gGW0Uh$ZQjHucMwGXIkE=^7d&IM|0w5wT(n5!ox4DCuEvv0!+)q zwA0IHA)%_ahN>AesBT(7!zC9p{lfF9T)vE&rAw%3m`CNbsrXAuad}*LG!0z=+p@4M zkU~M#bSy=stEZ2yfdOpIL4H9Y(o8S8P20pW?R23~00D}sVvBSMC#MjUxZTvaoDA;U zPs>ZMpgT2|EMLZwv(94o?!7$u^mFV#a+LPr5FN1?g|lZcec4i^%SmvcAE%-qZHchP zGWev8Q%MK&40m)=SXD`Tc!asjR`U6O{3?o~;Bvc}wsZ-P-hB_{6_w0gx|ppmyhMqr zBBjk)7oN}Fo^Fid5@w&fmWGupm@;=ZB{kJ3ih`X?;nuYDxKff#CMflJaU)SkM>(cF zrvfQ$T)Kny;UGy%q4h{BjVo8M`_MsZCQqlJuz*uG2Sp3O@RMMLG9ynAUUyH=!>|8% z%m9oP|M(u6D*at_;VE7CLkPj>=qSR9)3b9szq|c*E}J`tx|$mDN=vblNrqaFvU}eF z_ILN7sw$Rg9$UUT+&<h7j(c#wW00Y!yW&Y#Eh zHLIvu+=L$RBUP0|GJ!NLgk|GUB&w>BvK2amLE8EUP(5B;J|98|(gl3d6H|zEF9AhS zk*~M*kZJc}sl!Quk>cQn*JwS|N?BC}Yc5zzpdgQfhYqu2=WY(ScQInw^ea%dU>?(! zETMmR7-KYsYMLn6XbNaTpkw1jVb89;R4-b9v$BGD3l^h{?Ym3L%GtMd3q5=GGG)Imp5>TMj z<3bS@iXzY$^O8u3Wtt>~O6N!fT~pC~KAfe+>^ZcL#)XTIWfY#0B#uICcZP(Cymj~V z{J+dQQIXX0eEGlB|n$;{?yN0BMk->h7{5}-R!jNETDoF$#LqYbpcMvGZ z$M5xFCKG6i1j|N|0&A>TsBKFWHC?LPsp|wBIwh(O13_MU?m2`*uN!q7{pOpMz3u$|AO;L+K?C=!l!^kktn1q1*taZCX6EROsZr0!X+qUJps~5 zQYOuR_#F+)&q6OMqCKAED-Yby`XjBpymJSAqoY_tC1FeYMnW9u=w!#?Hum=q;;E}) z@#?cVdSE|!(k37*%DwKfyA=pkprC>ciIjonansg6ghO}G)7Q(KmCMG=eb_rn|eBt*xDyx{6_^PwIXCJZ7w1Nz=za%!Zv?*}Q!_ z&Om_9o_@M|2N)a*l1wH^Boo9E29eQGBC$9r!^V;dp?HjhwCRtJQa*PE%dWnP$_4WY zkB$-<385+~mT9FMa|l8IP>8<4VZ1&c{y+fBNC6Tl)9yhbK-v<-SPX%kHV|G#q1Ndj z*m{IryY`S*QpBpYYpATQW;h(e?f0>7|3MCSbYi)jRL+@;R0Kv}9|6*(!fX>P6NFUg z?CGO$_Do6}7T|WdVaxy&S5@=!BM(thQigAGJ&kME@bh2)nwV{&=njU5gY@+ZqSoiwdp!DwF}?r4}2hZD=P5DEyHUIExh3?xEz&=U%iG)+>; zBz28*NjjY9UO&@L<+kLi5Bl%VoIELBTleGcUGPQ&aAWx=KxAgk?kI!GQ@iC?XU9?U z-5PtJf04FlUgDB@bMUAts#J?`?Y&%h7|28S?&if!9CRF%dRE0}%7Wwf;JXXl~A zxc&LGcXty@#F;mzfe(K0Dn54YC%EE@4|2iz7czU+9P$DM#N%;#di&V2Wh*7cMHChn zU<1Ku6wB{r=IT|HOr1h+{{TijhC@npMI}841igbpgp*19`S~b{K$o{l4xqRqDSMz~OE@k?RnW#b#PsH(hymWMTqv!c)Xj(+q&K;CF9B9H$Z!?5I zC@Quh(ymAwg7GBbq=C!jB2ZIF-lWOwZ);`Q$~7o&)63wLK=r}U@48(P;PAS8 zdY*wdRs@p&pS?GYva7t$e1Gq|hci~4n&&E2X`aUt5&{GoK+Iq;7z{Qzj@|CG2%+_R+808I&s^M?cf0$V;h42F-ahhgl4HqL#bw|2Gu;*na|mKzwiBUgfny; z+pA9pL-MRutG=A|-*tAq!+(4pk)PgwfKdKSy&n)lFf}<&WzeAK>^Um^ehP&^IxgwC zITFz*1)%@|%f6O)69}cKsja4T;|AtTINf%Ex`j*V?CQpplHdN~e`3ql>w$kr{Z(II z&$ewh0&w-}Retw(e~Zq}Znj<5%#r6`A~txH-4A?(%dr?KAME*^FHqoUUjC~uk?!un zuLP<1Jf4sY&m|a`xWuBmYL-@%BT`Xpo$H)aLZgJd*6Sy(QHKd4K9ePeLBz1>I^M#e zmR2@D`~bi5(R;W!Fw8*z6|6vjZ-4(sl>hp_qj|>;+D^5yN(d}0gsD(MQ04P8)!R?H zuZIh*XIQm%!%yb*8#&a~pUY(f>K zBrM6&TW(_IEjKYXIYDfC3IQaYES@x&i6@wzj}b165Gp7n>o_Q#bK5~-2!SCrGUp$F z@(7?QHzgIG$5dx0@%cFxEnCXY+iqiGa*9AWOvZ6o(AbDK7sHvHp=MDNPH_aMD2!KH zO0p=78w{}bYhR=7t^Hg&ag>R%QTpFK%y3&9E4OcBCY>UdNU^cGnFl}e(SP!tyr(y~ zdGi)5+h%NRgt_@S)~;F0#l!DXV+F8$l1ahZxIQ9@%EgjjO(c3OIR zSg>dbb#)Ez$8yRKoXPy@1_(m`O2)>hzive+6-1%~iI36v%mLTHU&Y67OD%=XcMpzYX6 zx(A1-+jASA`PhRTJ$HeENCdmIoMclYGE~U?s^w4^!VZP8q-2FFDg>(7^+^TeecZb}iH0y%Yxh zIgSIFYloJA7CM*n@LaT`km&>>mB4QqjEoHDdzt*pBDgG{)~a>OhH|m7bu!1Wn6>lk zvwy&||JiJoL^6(WT>Oqlfn_3G7thU*b{w*vM_T7-w`z-uNIM?d4pFvv5xoQb7`Dye z)j_Un-pWlkZvVOCP9X#p*P4XvfFHxQNxLpVTe7euz@5t%@#x}(ocsDyeEmQE4!tK% zGdwm4rg55sYB<1qrkAoKIlUswzAmkNQ!Kl?Mk2wYaS!nnbXztAgmMxJ|7AXp(F}HTo}ALI6!k_J@w%T=f@|AI~i1A zklEoFSz&?}+ljGr9nUIg8^!_q~odYa_WVb z*?8}r1pNU58`kpCjcXY>dx1kge2#b~Nl;oChU92_4@*jmSW#7qPNgukMo9r03@OmO zS1|x>XA~jX?3=WZrCmHPMrKhEp~aJ@B z&G`cddEj^dBeSNYXya-g+q|CH%YDQKhR8^z_e zL<$JoCd%{Bu_V${AS~vy4$igy1Xt%O9S}91c}xxVQBzTb6|fP8fy$&2mLRD#4g$Z1f{e>T z1a2}-A%YphWG0!#4G6sI3jDRzlm&f+?clW}Tkbi21cq%P3=2grldhDD=P5F-gYq;P z<>4t!ChMRSFg43FfB8ST+;Wa`VNmPyQ(;O%hQg2vmC02YkQQ0nW@;`*_lvJ`>8(TD z`pHKrS+tO*hC1GU>n$2;e*T1+1rdsi6NJ1OJgqr5*vH1&TFOj8Vq$`_k`mCpIL@_Zou3n0YowH% zIdzQnYuDh$;*53oa@~?fWI-6y)67p!BJ3bD$ux#E&`P5P_)Lo>OIHwy6cf#)_>({W zFBC|NrOTGkxMVR!rKOm*g)~f*sSw&g7&#X@H})$~%0qby&+|}9kD~V}X%uNGa52#Gnj{$-OBgwYVJ(1b)Y@7jl*08q zJlD&O7y|`TQfpb11_P8>7PjXRv?QhwY`XVetZiGU+1yOsHW4XsrnbLllGyail~>0%TnmEd)u|rGIvwnzB-gOo0y<)3WIu9ib=~AbI%;4W*^5 zUcMZ(V(;F)*GN5ozUS`W{~DV&ZDw|Cf@i+;Whx>?6qZ-uuc{*Ldf@YMuKO}VN|e@Q zv_~3^_SwWuK_Z(aIx~Zr%uw(5v!bwo^^s!MhYDHa53}AEWVKGB3aU z0yka1jS~moVRC4U%G!E_}`rEt`{DY9ywcKldM*s{(w0@m}evFjC4?G(oVshN(mf$5YIw9me7b&h_-NYtsfw zq$XejK0h4;!$g!I);mD+>b2C@R&(a`30lv!l8a)0I^Lrh@9gSianmAB?SG4_?cJ&!fyRsIyEK z_$(Is11t k#k42G!l`>72DsrCD)_xq^}*wpwf>H{{lew!-GCSn+bk@$qd)B>Mj zV&)3(q+O4mkqP>)^pQ-Z$Y!(5rBcYUV&>9mgjAS9V@n7LNu`vWc=mbxX@})aO`JUW zE`x(Vo$=<#;X^#~(FYmo?BMMmJx^m%gjFk6kcr2zgkWxT3?U?a!=q$f5AWKbP&gbS zQeQ*=)D#uf)npxqQ1F8}oAMLb736iS*>ajBO4jAgpj{5)r|OMq=r2FJ-FP-L?n@!2^>FZYs-%@d!WBQZI}#gk_-q=}bt@iG~l zOd6>?icOORw#Cq?Gc?vz5($Sm^v*%NzgHG~uQm9>#q*d_QCm{P55D|WvV+6ix@9wd z%fw40ac84MCuT@yJlcBubCnA`Orfc+sie4}f%cwWs;lcT4C8;1FZ;kjSh+oxFDO|j zfwH_Av_HTZ)_;V?g^L)SnWJXiI>tPWD=mBi`~nQi;`qfjP_UzUJ%tj2rX*q;6vgK` zvv)7WQnG#97BZ9T{RQgG!x@v^j&HvC?x1y(~o6Hf_@+2fFGYFF+^^j zU!pM$iGjjGAQYGg3=E_+a+G7P#*jH)K+_c1CWMQ^Y`Ap?8}GQCNYg@;VbK^agqWd9H?uO48aTTDv^txuO;sPwcK>(=nTa2DKiJVWca6uz2EhiZq9Qet` zS4wfYx0m6o1FT)KoEN|G6m9!n=laD>+`97?9LGbXGxWE$Bc#pwD}y-V8tE!vnI@%8 z4LAiMMkdDb2Yr;5o{D$X(JVpFtz|o!{y#S#$pLpZd^}Y;{y8o2hilo zSW?P=(Eoqz*ij5ASYBVxt4}?};qU%{2XDNd)tfgH@SDu`_o3!uoNc*CGV9<0>KgS| zRzu^aja1)!1HE%IoH~4r$@VUmghTkRG3S)k)=bX ze>lYT_uWU-vY1UKky@Z#7sJq4QXveJO%FeWb>lV`?Ab#y6yo^#iv%49GoGaN*fB1h zI!kFw^| z_19lvZf@=;x7@{x7f{M&&9WsNec^eY|I074bL9$Fu3kk+btTzYg0Y@Hdin;Ln2F(e zxp{tsB&(pfrW#pSNzsyp7y??4ouI}x2`H7D`19L{sv0Ukaz7it@OjpJ=2y8e7bWE= zJl8{exgH0!CXq-}zjiJ1x(%%O%#$pC;&Co!(?l~)ZnW5i6)V?}Ew7;Zy6b5f9$}(1 z!p0{a<#IYn0L4^!klhC;(+{K7>F zO_NALh_22yP98tT-+cA2sI4qz>4G};ef29Ge(GB+EC}(LU;i8hB}GUnNzczQG&sy? zB1PBaGzlT`WUduh`Fu28x0%Wf8|j~zWYN-PShht|)57P_#dAM?mP?n~*!S{_fM(s&#hiZOIiCNMKVy4CE!%I{%Cb!x zAemyI^*rf}%jrwqB()-~6|UA~G&qLA`W@R@b@yFNB;)j4xP&n?OQmJw7aHN_#6wyy z_b?for|s$hMnfG`R4|`T(&$?MooWF>#D8i+&QDy@s>-OwsG?^glX%w27 z`DtcnXXxs<1V&C@(DmDRgWErUWS$fnaYu2@ccPdABFij1eAq!fxvm`^4# zT!lA2h3$AOsIQ~t>=|C!_W}>ze-D|dDW3kX|BYi``#OvKKECjqzd>1f87k}G*Mjp$ zPcoZGa-zG3G#Up;BgqI!-LhqP)wK*pqhypu7$!S+>?RNheDH67$oC#AH~BXY;HRRZ zqKfObZsTH47q@=?^K^XU>(myP&^9`O5h`T;P1{LF=Naj{jOV$`rX9uxhY^5bLBuwp zyOUS`^iOGiF@B;pZ+2 z)`Bb$a~*D2x0c$in|b>A=V@BCim91-HaB1QzOJLZBF`Rxi58`KGxs4o08Gy{fB z80aTjQo?XiF@+hIpzR~$x(KOg-nfSJf@)$DGfa<7F*QF=G!etJ4MKqcT1zIgE=Ruk zUFvpjXUD_$WBP5zJ3Bf5>H*$;>RW7HxPbc~dzeUVB~Cicz?suD6qT}X-+o*Vgp^1O zT&c)vup<#_n%A@L(MPy6JjnUO$0&#;Xbc7jOAv;}6_8a5pQqXTm2a?U!v;n!Uq+8l z;tvH8(g1P-BT@?jejlZ-$BSS3Dhs!5VQ6HO$%`GVFDgc$ag@eOCg?xiLa?b3Uu`w9 z=p4i6FX4~J2!_Md)YTD-MoFi$gq$pw-guo*qyVe5gmgSf$I)X1l4-)WA4f{+SFXe< z2xFNhb7K=+J<-CM7xodFon_aCb=-FQ4x}Lv83&a}(0%eOmZv$?)`6pP$v&kaD*NUv%PL8wvuxO~iEu%|hvW8#e0u<;CXm1OD48EVkzXb>G&FF-wi|ij zhtG276HjvJ&;Fc64Gml!pWwu6Z_wuVvu^1Uf=W}YUBbl$WQsxv%fbaRN|A9~wys)3 z)t0TSTfLT!GpBg%ndfNRyN{jgR`K8`9>G^yjH#gO*irl$j~9RV0xotgS*IXtXp(56 z%H!5sZYHu}E$6QEFh4oP@x3pxKx;}(iBGEBSgfaU1Qgj8qrH6`YwsW=C3Sv3VZR>_ zkt-!=AU9G^*c4Qxvvj|*A0?nM5WvF2(GpLA$hcG)1}#rNgHc{eDv?6R6O;%^^PXEN zTegJh@d;YqdYi(uU}4tb?023a;j>AkG88M1N+F0USiXA?a^pI-J^m=K|LBLzv~_U! zJI~PQ4{-mko7uW`6NyX;EfltrTsU}`=*%pqTQ86lCOMfDK?aYMr>I}J5GN8LTT;ZS zciv?8o;#VHk8;mF_r9;|C+{%wy2k=0kU!zR4}k{YKZP}`*U{g1nSRl{oB9ETq@4%KYpG!zV$Rl z_hlZqaT|BscPDW#OW5-mY&lDIaELQ!E@Bt~Je4E3P(qUi;#zalp4+jPF2t^_Bs)39 z-fuoliR)1w2%!v%()t=K%OaD`Fgi9)IP1_9@Z*F-2&M6x*C@19E(FN61q(c>Fp!i5 zEXo3QZYDtI+LIlXt6T^vFb&P}f-vbs640c57EPNrvf|N?GVUteu`#wTTg-`XehYhe zlq%CCnaPk+3d0cSV2Gu=ZlmU7596yY=apxlrFHL1q*~9ht)`NXJ@^1cg+Wr86b6#S z)GQaywQ+S|n4W<_GPac?U^T$SLkLNIRUHlM)^gLQKFObd>+5X3?mD`zfWjvoKN1dn@#Ih(|i6rC8b5ojEpkV z-ovG{7m3BQWE2P^Cl{7MkwLI{K|ZfAV^ROR^M?Oai2}X z$&#F$VrpW7AUQogQ@LQ8ISzetq9Zx)LZbwD0uW%D@A2)M*nuF0rKMn4%+Jk{NTkrp z!|+@R%p9MbuzmDh9b}#3GC4O#7KLL7$~LT{zi)_;tFVOtQ&PTgA@y6gu;GzMnNGzy z`s3%gwC`1d!^7OZc_X{`>_)pT+I6v%M{ip@ljGC0U+HIHYz$>clp#PGxI$w{lj4$6 zR$RZCCHLLOSDyVIC6zVIMPsa7xtjIs)_=G*KjeFl`SN=J@pl8ZUt?1!Oi(Dw%E}q_9Cm%~^UNm`6j&DD|9}64@dIyB7YHJ?#8nEVL7|bR zf!4Y4T~F&=sm~BdnUf=L+O&b-f<|Vfps21EYjl*UGc62v^-ykDggk*yYlLu^ol26J zo5%AUGEN#Ck7z7O%5(8)38uyB>$ehEv5Z?j{VCo)e2C#om$>-+UY4S`>yABax?vls zObTJy;ACk((?Tkm;^c)(xmIjp=JXYHPQ=`lCPpaCikr64bl2^?b-sl_VKH_vKrEKv zvBy4%VHiK_U;Dv>$g7v_GydqaHUF8v&kp>*gR=WS@WVj=93qh-Hg0U@Vplf_6iZjH z_R1`)qBuu4}MEwEQ-ghrmyLPj7=MH*1+IZ)O&++!(e2eC~Dt`ZqpT}}tWIBzN z@yN_a>FXQhOlupClDIW>GkV zAHXn}D~u2ehv=V}B$;)%bovb0{z0lNAGVY^aZ)YNB1h$|uMvcLN+S&eOG->>u2!uxuA|HigeJXe$zVE?!1MOxhQ@81Neo3(3-U4kg-exks?yDD9O*2NJ9o&+TXt`-=EMP+Rb8*bgf`X`^@-S##H#>R-0mNGjRnNFG&yN;SEw8xfL16aC|k6I(Sk6W@41)O*3%q6@Fx9TU05hQ z(`NIIo7nWwy@-M^SKc^4J%VD>rt6hADDJ(2W0^$9Cr}gP_zMbHxqA=mKmG`W1HAU~ zi?qCYfJ{dx_pDjY9lLHKTvCL-CVe(PHqJ;#4@3P|IosAjMo1jMGc;L5PHoxKR4u4u z!3|qj_`vjwn{BUl5_&*W?{2P7&2qCa6i-#ZiI4|yf zflDo?xaSZ4fOlWqi(OK}&A;|JW@e{2|IR`7f9-3ySNizG{daKBV;^I_zaNoKl8(+X zJ2JuLtE2P}T*cElEk9Ril1h^WgfLjRVLc5yc5wZZkFx*ZLB_8R@%p#ELvbQWQNYi( z-Mbl?nPz-)l8lx_YO2XNS(IThJ0B%nRn2sHIhSo80iQ)Q7DJ}f1bi0anoPM8IZ+J+ zn1)UD(nUmW+r^d3-JCygfYZRWfR=~q6*Oft@;gKu)|dp{&HJ;#GvHgNOy>#&0%kP=J6U`IPM zSFY05*3RI>6s~E40z=ANUP0wbn@vj>QL}bAtM0##AHV(@X%DJu8yFoM<%?hZPc$|* zeRwzj{{aYnW>X4sUgZBamVF(<8}ef6g80xWjZte^*tSVzV>5UC&KH@OnZ)%JGqEUB^HD6zhelBnE?`k@ zEn$BE1I_UtJ`*nfz=SKeT0Ab?*fl-9VWq@<~l%B`EZ{r7&4GiT4xbL?G? zed}o&4arAuzm=6M7UO9TVHku1VGiwk12d~QcKR#{*TWS8B@~{JXhV`vg1JnF&9~f) zQCr1z58lV${@@2h%1SYPew3E{_HX|lm6cT={>>k6fv&u%Zlz2hL%t3G?c~MG2L)0} zRdXx)Cj&kCKeXJ@j@dxVy=XJ|XHpU#)| zvOXN(p$G1#rlA(46_ymZu>=SAzsl6aES-G=I4W1}Gz2Ii@r1zf6jm_A)|+o(@tz$R zRpmVO+;hl4fMmwSO~?41-}+aw`2ntpzUB#;_YQ#kK>h1F06fp5qqB{z8`p5`l~-wf z^AKnEy~fU!OZazBK8~jx+=&U|;}Z;bbdroEID6^>wi!f81vN}6B&7hMD5|by(_ME_blqkqGieUJ{wk#<#bmVLLVE{IO$#X~_;7Wg z{ZTFOE0qTsqZj%v6Eljvy0nz+(;%BL%JSU zE_RZgi_+0@k!T_V(ofcdEZ|CkYg(k0f=HOVA9#Sm=C#aOaNy8El0&0heD@f)KKd}J z!Z4ry<3Hr9U-&K727(w0W(Tj*vi|^6=`2|U;hHL%mMq3FEu_>8Umav>c$BcukJOss z^KD3_FbxZVK#81+utMi1WxsKrSWvu(uC;7qi&ykA9NsWwQ#Zr_nUc~)(-OZ`9XZiA1 zzQq6a`~UZcXW-|bLw@&I#`vSp*8B&cBroQQZuvl~0{y(mX0vqnbP=))PQ3aGFaG6U z>g+|fb+FijmLu;{-q3&-4sgrecXRy6yZAj9kxVk&*-fmkkJ*6%w9m)F zRjW{1W7{?--#WyZmtG;(*3NWC7vA_36{bblHm=qCHOL%QI3g#vopN2w(h`D|;ky_YU>`N(lX$vDdKSiEf;;mw;cDoQy1)S63+I~UGhVqkm{&oFR>i6=CkA<3f2*fwi!*hbCHo2kBO z8?U_fD(U$-Iu0Jf>+WUx$^b*dW7s~6#VeMPP9?d}*2bz;tMU0h;H*DC3&|dsdn;eo zCXGM(Y|UqY{1Ev?wm@)2UQGQmLTgPXli}Ba!+rn&AOJ~3K~%!|Rw@b$Ir`#WUij~S zL1{9^7k=$CtX#E{M06ezPx02vZ!kMD$@z}1T&#+~(JGhVGC-LIG3BxBhHX@A-Av=2 zTRC&-JQIUMWV$aC?77U2nrezN8LDiX_H*Ybtga><^s{8$YFdwf;B$a2f3Ohc(v;1q&b;sv#j~@lFDa(b&C!tc_g*F#uvyU5#MJBzLn9+BU%uies>B~k#LwqQLGpuP ziO|#evW6SYo2g$$2qEa`xJZ3P32#65EU*6cm#9o7`TgJiP0A}PaGezH{2UkFJ%-3S zbocgQXn8Hpm!yHTQlx}n(#f*z!3Xd)uV=*r_i*I+VXRb!xsxrFk4^CJ@41_raELO$ zO`~P7yQqZGy)RRwJY;1VH$Cwfee*GVQc`SMl-VXkX9)W&3?VRqpwC8nijbBR8zu!p zV&LMbT%W%}pfONhjsZyuiC+k+9FO)F_7T0(&(PIDtjZFSL_;jbb@BnwK47#kko?YH0h2Xf;dI(YN>v^H%5Q+YG@Aw2-zWAJHhJxh__;H7VVozvfc zf!eIY=l=cY@cC^F$6>6ii|L*#Ob(6GKRAvM2Cmk4Lf~nIBQ>s+$e^E1x7<$T#%+|; zRPx$OFB8gSm_2iv+g7h+{lbMzUb=+eXAuhf5ndWI?XWfI=jd0z#&uu#b;?$)V!`fP zm_K%c0H7R~Q*R!kHTD+HNjg4Dz$Vrq&i(aXhK>@-5!)Id} z20}WNE5$Z{fGe*bpy4C;()_@Eywui?FP6Zs1v(n%{EM&V{$Q;!5LEhn$XtyemwiX) z024j^WOQygIbs@wrNHnM^($7O>S`ICnPTKp zJAH2)vEJ_^q8w&V zM-kFw(y}NhDMGj|hBVQJf#o?=yAETQ+L>;s$6UUQrMKTk+cQ6+-Y_Y*Z33o2s33@G znAo8 zE_*)uQ3|(h#n({7H^2K7ek~Xto}h905^8IzNKZ^+35cfBobK+!@3Zj>16wFG3QsG@ zWGJ;Q#*Uq!uCR!3X(@*ezsX;Gil<9IMJC|X2&OpjZF}glB&fEDcZ7?%l&=Kw6~+Wd)al%780{FgiDGM zu1WXB4zfzq($$GZqA_r^&Lu;o!P@QHsoK4Zp809o_wGea&vN1IcL|o4QNDFEsRi|1 zX}!RX&CM)avY7bnJh6#UlJR-c@dUAW49E458e~?{pfm&T9HREtU383$(6pe5?Kkgu zpI1{#AR{W3sn&Dhu&0iVe`FTF_HzSr1MQbuz_Jx(-^->~R7af+Va zL1trVq!4&gkkydU9+)P9qC&RZc{{#!D@g`?9DL_3kP`$>j^OJT*!c@a6A{STrA6?&i1i3Tu5qW zhI8+p;LWxR{MxEjw6&h)!V7!3t-gx7NF;Z#Xiai@7E2hkc64Ew214iFiw9^eSi5x# z%kJF6rHN6_wYFf)&e8YQJ2d)(B$5dtp)ghTbzHGbvdJ{@aixbC0I~Y#MqSq=Gr^)H`LR1u7zdGS5i??@!<&tvZML4rNxwqR70qrPpkcB zB0CA%{m`fbd7ekhnbRz)EvMzBmspfdvaMk`iK%I7mo(9N_B_**b4aNsJ<+qN)lSS-H#E`mcN48OUb1;U5pxJa!L z+QGY~M1;=R=g(8Ibu-yT^=#hxyPUh!PT!?AJl7#LJC7EEP*E{) zCzazEa9tAdM2<%OE>{eI%{IDLJWuXzQEiTPRDdU}Y> z&r`UhiBEj=embx8GTYNjNj%QFO=}>LK-e~3G{wy1BpbBp$7oDCZKHo9CoA{GI7m5WWHpR6=WyC zmsb_j_XS#OqR}W7<;9#nu%BexMebX^1iw(28V1_Cn3<1rabO7BvQgwHs?ti47J|a6 z3L0+P&7%A7W&hE4@zN>I?tK+wdWOY@h%&(CQ2zx&tpX>OuYXJddVWr_x5t7vzyDUt)!=Bu{{?{NVLyS<%(r2 zY2JVchl$6Myt40A=H})oC=B8A`LHdEKmM=(ANSmS?@#2jwAO6e)C}apAjff-ot@>> z=@VSJ+{1;g4vM6t{oRx7E-uBNaX<)!62xPZq>?GR2da;N$Na}9Gk>ysH3~PolToJ`$;A(CrXF=JRLDX!i04xaP> zv-jq4l3mrE=l9;X#GVnkuT_~@m9?n$O{&r^BqXs41X#jggfSSfY1`fHk7uU4?QZb2 z?T_v5>9J=93^pDt0|p5OkU)imB(#-kQI$$6)xKrrzC}jH9`Uw&=Z}|FfRR8;Sn34- zKA-%2GPd*Hi@4{!bMHOp_w&)d0u?g&3P2elpJzru>DY0aG{j7kqYphoW@ertAy^lS zvOW=Gg;o^zA7by_Ut{*r^K>U-{Ml#zGq=6t?U<&4(ux~zx|v&VdCN~|=LsQ*Mx#Wd zQ6iBD$z+n{%a^lZ{U$248m83Do*zc!a;$7^Mburi>!Z8?ujX><{3xDjQUU7Hzy;d7 zI$3e$PTu^9kFxjBGx&u9l^2fFr!*NMh%RamT3V5xnxyV~tiE;^%XVGP*vuqr+B3Xw z=T5F$zky^dPFWh9S|~AF4{#KV%|kAIkr?yOAE7-KW9004Mn^}NzVkz)eamI%{z)nB zxHkYUG|ucq!%V$V&{|U}l^DBlp5Y@$C>=k^#?DSey^Pi#M57!!eU^gbhBRA(kXO%; zlmnl>&0FZd^-cWc=RQlJT*j0p&+U7L44RB7NJ&XoG{!Q^ptD@!x$l0T+57@c*IdbD zTPr~{fz$>{X#&qfD<7qTFaZ!MOv@$U*0E-1U~Z0hBuZN{L60F=*_323ou)UQpg);l zTUQtTUckh|Kjh>$zs=OXz1(>D7C!q|f5nb%+qwV#@9@Ph{w)AX{U{q07fC}G{{WtQ z{xCh=UC6*^;`yUomPpcWnpl2-@D-I@o?N-ciK%HyO5q@>Yek{z(0ADyHvh_d`OClj zOQJ!*$w!`G1<-*YB?N&V;0K_6O=WHl%an}d=CRkVM66rGffFamkByP>J#M({GMc2o zwrm_BaI_{c4C+$T923NISt6AZQhA&>ejLy9mVR-NJK0EU7lioH2q$T8%6j+Jfgn7%@L9n!tqnsss|2AN7XWH!8)oVagAk05j}SE^bEnVHZkX7Pi*j6&O=(V_JOw)3 zeiDR>e=dqtYYQvhbUi0>SzMv{?)Sb=D%FHnuOnR_sXztcR-0A=3xlMDF3Tc1Jwx`? zS+cf4>e{QAL*gM(fkycrQiV=p5C$lX0t6|;Ku=H86pgTa?OGhAFnk5BPvCeMzQXha zVk#hmW<@f=as&M5Uts3JhnU&BhhTn|kKXmGsKDp05B(Zn|N7UcR4OkT1e708FO_hz zbF|cJEK9_R$#7dS2z-=fb3V6#k`lehHyF30G%xGMTGq=8&mU&w@C#&0McPngZ0nND znp!-bK;V|ESVG`>E{{L?6z3Omv|Y86Lxns!X>hh!Vm_be>dV&9YMThHL&aoM5=kUz zvn}LYmW&-?a$=lP=@+0zrLn&CV*x;mGYvEQ3lIRb))Wg1lxDM3rzYr#M)4~Z+-i+z zBE^x@=kcW#cJ+yH?x}&c!G0oxeGJb`aq7%Dq+yUwXAmj~SN0bhf-Y9whM53FCG^K5 z9NYbU>g6ico-Up(EZ`VMxUhx}>A0mv8Je)AKkW6Ffx<47NE;UI%ldFFlbRQRFc{jf ziD)X0@70OKEwYh$M_R(MG-h1!i zlb`%JQ&Uryz7MT6g+hTuD#rBWI1A^7>9r%IY#H_vX^rPAsz{3UI$8)^rSStrb9084 zjT_ke%w95<&C!Q{NLoS4j)t9xA!$K)EFlqEWV@l^RAoi54NTrl|wWSOVJH zcoL}>A~!KX z+z6R>r68R9>rl=cO<30JIm8T&E*8NwsU}m5&lgxGZ8EmS;O6x>r2?_e4o0%G?Ea@C z)XOzI$46q&6HAh;dYry*H|Y)Qa2Imia>F&$6@2=S|A-r|zma#{_HN?wIK$`9W7#J2 zb6N5uy7ioTYA>;P6sPWSa&nUGmcb31E~73a zkwlEz!U8G?Fl$w)Rj5_U%;y?c?(&8pD1tZJID1Mw4;M24+kL)qmVw&2hMIf5Q7jgz zmW$N#1*Gc{GfV=l5td1|P^2a#!D7IaLL-zS5Smy|H3z&Uvk$XUkT2Gmr*@azmhxlCbtnp7f1DPJTA6w>jaQbQ@9Vj=$%3!F<1jn1si z;70*KY(6pzG_H)Vda_}r-U#Fid8*Yaf$zW~jkd1^!nDYiO4PN&krK5?U8Mz>F$=pT zjS_<4;R~3SK_qJ9cy&zE#1aCb6#@k^Wa169T3koa=s*#X0<}<}JU@@w+Dg$3`{lI& zvUbI9d_{r0k#&@W@Z41nM&cHFii=D!F;{W;d2)#IWFl`lB(lUQQ&ETG)!z$ zqEvui$nv(Kes(Gc|A&uJ+`ESh2lmt2lwju-JNWWfzQq0mPZ9VEU3V}X7uyWG9T6I( z1A;(PtX2q#MkIzIh?*vewpI=tIl|QVIQ2rAxM_#e9~POv2)84{Kq)YUKuJN(@$g(9 z%Z!jrBq-#IXv-j;ZX#((S`$$^+FB@hF6ZXv7|kybZ%UIZlyH27uL4jCw_c}GtxzhJ zmhMhK^;9FRO^I!X=ip)n5TbEeK>3A+nR>k;gutoQkW!)pjUglf8ea zj+n$PiO`|gNT7nna}2*TLxWV{X@yKBn4Qm(pI;yW$iNTp_JKmF@VX2HES^s~ouGg1 zT1s_?y658gK6cb15-|~IOxr-jEI$0d{d=SZmT6Ge3Ykn`SvG;Ia6`&P3=w8ZLWAcm zVamGlk;d85;*zibC;$lExByUT?2O{|gw`6zcTrkk*bxvCr6qm6OsR=Vfhh%2UzF)mctL+M2{k>DLNAsIhmSo1P(Hd`##bKkOcO#t#1fchxQOT~O&NnjXNGA>HPM+$ zAUy}+I|QzW3c@0$ne04L2%?_HWyuuF3PmbEe46Z&Pc!<=GfbX6Lw0JKWNQmOn>XOc zqXfoc3o#l)gNeq{8e2hhaoS_1Qq+|q)7pX|1(uK@ldyoWK}n&7#t<4U0{YjjW!<$` zF_oLAUU$f((*&MRb2^RkeS#oh#b7^`@lmqb1uCA0ortmX+N;RV&0(1)t^$QX7zT!6 zh2kemc?!@-pZYOh|4{%?^0|f`z?}*ImMAh!X?))erK*I1#snd7T#uM(U?DId?73fD zlT)6LQ!bKBCWu6BJkMk0%0cq^9MkhT-u8hz@of{+6xc?{!>faE>njKXI{N!5HaBtA z$3DubsWAd6iDojCyn5&$fRGwtEEa=`u(3xGrXkXGaO-teZQ6k7Xd#Hlu%l6=VG{_6 zuc59bpI%Gv8RjPiD^oYKgs;Q131%D z_$G9|{Vf=`-okjMg`z2uR=A!lM7XkSNQFd)&qpJe(Fh$Y2N<|~J5|HPlLnqvp-j1y zNGUL)5iY;^CK5v{ptXgn=Tj<{SUEUIy;@`aW$UQsi}-~S&9OLppWIJfD`Kq~ntQsq z;@WGOK5;tS5)8mFY%DX1Wm-sKkVqunurc+T;La?T0XGO*T=MlFb?q3z(+z710;n7T z`{u^kdz~PJAk*A}VOsc}!jm#2_R!!sE={orwpJJtgqEnlM_=_~zq}BV#c<<&$V? z!q;F30}-YRAPuw-C>0QBO%Nz7Aws@**JC#DxboLONIIM6=y$(Q!Vs89z`+-q;fXN@ zwr(LEv8W17pap)Qr~^6IXMDauN2VFy3&@xzNu^P?P3hEWIu{DeKlvo}zFx-Htzs_K zM8}mou_`qxXHR37DyU=(?U#^JqLfBj5$alF+BV0}pJ(;j)u>36sb>z+X+<%VhXi8r z80)XPl0tKa)*U}ojJ#{zGWohG1d&N;_&&iL_Cl2u}KabJ%ti*{kCn? zJcpA{?}1VQ87QP7v63+YLy%}{g2mG2C0PvA=!{zEr!W5dqX4k=@F<72j{|)TIY{|1 zG%vjXptU9zjgd$uDP`vosU%Ji&?G=G zZh_|xKgY(+>p6Dp1QFBZn$4S7-`mUCC!VA&9-+Ofo3{Rbyyh0l@fcse|9eDJY39c! zY2CaYD;~#FVTGJntTnh;Dg%q;9Y%Q0wlKqNLcwscL^2X(^__Qe=CQ|dM@C88Hf9iR zt4++zvZ{YM`It@Ty7f49ms)O~=~HKT?%V|i`Ue;$MXW#t{h}#dpqOL zJWHZlCY4IiIyi{8VvzowJGuXf$FWjzo_p?jx_i2*)yjP6gCC+=%#$CVAR#QKXXjCd z!F%8HPV(hEx88Oe5B}+2kVNB{5@{PGJ6aic98&2t@px?MQiPQnmz)D*V#lFNMG=<* zfDmZ?jM#(FcQ)iOg?+HBA(mcO2q7>{lji0Y&I}Ke>}aPplf{fmY^jN=fX;M+oUf@% z10fBBR>TA(v}UeYX7$QdoH}`i>A6|7hE=PFIDPIMsdO462-tP!9Srs_M@a|*%|p8% zWORC({*|k^=bn36wQ42RibH%+vJ1ml6!(y5sV~;dgsfhHKpGO$wh_``c6NprPM%=L z)~$@s&a(2FUG!dc6??z-PxRO}5i82%e2(k;)-%}M%Eb5uyh4FQEWx$gw^A*Xc;eaT z7%x|eMqWQa` z*6Ji%nyCdYrfG8G;MAV|Y>&mMmCL;CmK!*F{0O&y^f!3&?k|(}d=whf)FhiT zBzu=JmMhY=Y7J5vm-HN#9E$rIXG`ckKmPD1LgJ@C-qVHPZ4Eh4P=MCAgSj*df{LXQ z2lww|Suzfz!}KL$*izs-E^Xc2jLpsyNaK>qj;$2kt*z`oH%w}vpY>a}lAFtt&1M-K z7$BX=aNxi*Br_QT%jE3XC@0Skb7o|eXfjEuTIHc1JjB+mTlnyY?_y$Nj6~hRJ9UbI zScJ%;+bdyGb6xyEq5S}*6qaRCjF{9`tR&}oR4P@D9X)~PE2611qs2Vi-*hd>OorKs z36iFP@6?zX8)ac;mO{mGtz`fJAOJ~3K~$l_d^XSc*d(S>40d*tD-`imfN2OU11u>J zQj%XNGSJhFlP}O>nGD!*V!1rCXU|hES1Bk>*)r(fxSrObl?16cWYWYkO`JJ<9>;O1 z*XpcXHAJpb=IqoI=d(GEjgDfc(gYe_IC_-kObhMpt>ou({P}8#mG0x16DsLvQe?dKGZS zVe0dZvnTkQ&wOF(nTrp9lDR{Rry5of2vFP$?eA-xz1I*xzw2GR{q1k%f$!drANY7G!0~;w2&u&pp@>Jg z3Ai{N2#W#bp`ZvubD+EiG*vI{Z9q*RAH+$tebVyV-Qt2bg^FDb9_IB5F12 zzK7$3uQf^u#uoDIS~bLmW!*e`{v1+8(1E~LAcaX;I~+bg%GMSA1eFpQe3GU`o3=P{ zVVvRd3CgW46x!N|v}EX6zMT0=fv%QjR<0OeVtkTJa}(ne6I3fzY}+Oti!wGf#eqYI zsnx42@9PWMmHdED|L=c-u2nejo$pXSew?>ocNN+38D?_x{K~I=fQiSSrgG#6ajimW zbsU7cNT=7Kk+FU=mtx zZHTGY6Je?-nHV3ZS}tSE&y%TFuoY;jsgkXlbAWO=~ntEE?m`(c_3n zgk*D?_kZyHXnYPFIK=q)1lzW4tB)0ci>XA*s7QD$oSV54R(2i$W|;xxb&8N`;Y;Q9kvlf5RXC z;UBVcXo#owJWZ)uA<@>xiK$5jw{9WR)y=81=ZHk2AnZ^m)Cjlde5c07WnmUj^EIvt z7K@bxNRz7T0D_K|W&)=Ugf$GUw#9N&lCIRLj*jEz^0>8-2HaDcH{Wz4S6_P##bS|T zM~^amVVIHO5ze2xKz449TCIv(_mGCJ+{ArH zpJ&~=%Q*Ml@3AG54!4-lWas8s)4z;E=f@x#!xx&m>(bxS!t&`Ea(fSOGCPY=sj~L6 zHEjRXR*K~s3;6=2g&ZC2?ffr)@CPhkwv2kY%(1T~cu49xz&8ae zE?Yy(n{MRW_kE9ztJaWcZl<-hb?G_3a-sCh&wt;`$0LjUAD8gc=@5|e>eHDNv2MpBCTLZ2h<{V*!HV6 zrWR-g>SE*2V)2nygk^q&WF1Or0;ND}qVYJbZEcsXqqVh_JMVZuS6y{AU%%&{ICk_X zrWN79)D(S#18iBbijh4}A?LC*DTV34LZL)!GQnU=8l6bevtp2Rx|x>tRu1ev!0D4` zI50LvMZt=uB+7NL7xji?LXxy4?WV!Xc$|6=karv=Pn==l+%VNdl2TI>K`M!g#Szgc zGp5CeY2cR1WT&R6W#`bjESr`ucV?LC*d#`|jPN}i6>2QHT2WV! z?&_t|*~5{Or--+19008Ld z=wSQKE7|wp18lqbRwll`n?BQCoP$f;YWU+^xq21HhDWHBOQ>pvzGRG%d>)iRiy- zznAxX;v@9+cCs*^WAfN>oXJV*vvYWbGETjYs|BtQxM+L~ik`!=p;fe9cP*d&!ryZJ zTi!}`p}>m46>r4wdF@#EL1XPn_45OO*z){@KDhmPU~@wbT6lcPP6JHSWZn7=oI3gf zW7%2iktlZEBP|3{NK6^lvo6fcv7)sNDK!xluzBSG`R9({1|BVTjGjo8Rqah+7-YJ7 z>0Y&(lOyB&@ad;fDaptG{ii793w-7O{yZt$LRwbH8Q=%REQ!!T*d=EQ5DJaHB<>lO zA}^M^qA^U9+irXJrP_gieob0y)^AwPU;M>i^5j!b^7!MAV_OkU&gX~{u;H!`BE~1U z@YrKm)6?{(Qat#r?~tohSg6*iI6jUFEButuXhU!;n`ORM<%*#}s`)$#(+KIy;F1cE z)M1Z+Eg>1PX^%(orGbkIJ(G}7X8V%y=L;uL$S zTm1txDgXr4B|Q!3?;m8#j?1~{?k{oW4L5P&dk-=sLTx%jNVEY6iR;#|4M8LxBj)?u ze)TTu%11KXX1}Vfvu`iU?7}DU#3(v7;%^EDrdeLhFh$j-eT#ign(voSW|NVC|d+=FKA3cgHSMURWk=I`$ghm=BLduX0S!u>96)MM1 zv1{c35j5JVhZ5vMTw*kqgy%10*xGDKjcpp3(I{p#iZ%p7n)sD6l~NJkso_^^A)jB} zp;js3`#xSEQH0;U6krG&Czc?#;WDOENuJ#O0N1|x7Mfey*t}`W>oHUskK*3YcNzsP ze(LTIKRW>YhlU+|;h`lN005+vY}mAgQ@eI?@Tom)xoQ{ZAAO8fi8zK@ydw)QbSwcC zr-oke2r4BOoI2+h@)SIeg>sEKC!it(mSwYZ)f(P@$9t(NpKt#8f1@`NqvrUOw8ql{ zUn@M%!8T09B4v)ya<4fePuoObaa_ z?*}}7^b|uKZERV&f}l80;M7BDGr^_NrULEUvIGes=;-L=>T7Oba$=m}>1o#7a4o}o_R?pY zL?zgWa6?ssrvu7Q`8uievaL z<|1tvLgEJsuU5sjL`VoC1X2>F|AeHV0YP|B5mIR>r7$deaWU@Y4f-Dif>z#r`)!Pl zj`H-Lr%0ufEMymWPJk7$XvouGd1Wp~LK&c?CQIG~0CXTH+HlOEo z?pgYq(`@YPCgS_JwK5{`!?s@}T7v0^^k(4&=&;mTYdkN&_Z13(7bu({KnTS}Cd9gi z*1lfqw#^TpJ4SkF1vmcg@9}?pU>hm|XbmZtOjMOb*Okrt;pzhW;O z`l%OQv^e@R_a4`u{>|P21XncX_yJfQkl4@|b8i4zTiZZLE=*2RlY-XP7Uo7qX|^q* z#znG@aNetwA_#n3&!MHInbqsogD_aJY&jb@Z)EM&S8?jXFyFZM8w|8$NEx64g+fwA z6LfVFA6Q2D^jZ2{pN!U6LZA(akD%^(i**12ngA;rp^%8N(B6(~SqQ`6x@)f^l}f#Q z2UuKeY;JC5_3Aa)b_Bo)_e=G4wD?rRP9pm)=(q!3=AG$(CR|()y#D$(;dw559{(Xz5sSfF z-^}o1KV*ez6OjTD_?S8fCBjs=Vqct^qdGoAZ)YEw&MrL9=h5%)=Fx+P2~gOUfp$EU z7I=W8b*L;HD0C1IF$}E5Hgkw#-cd_SQgR~=*e2*jZ zIi8=LBPIp?t?dkSw30Lgs_vjXkH8O^d%|L)FvD@Qj}vGDX=5}u)6|k?u2y0H$S9LX zPZDj;aNQm6W&5vvh(`}T!^}dSzJX;pj^cNJ=ig$O=F)V2bm%J$H7UOSQZK!90ND2I z9u94v1RA6BRXYon)a&2`s>YO|+L9OL-#d9MDA-(c#|M^Gadi1{9I z%fPZFIuN+N#!=uICL_5yP8V{FE-Wy)kVlyUDFoS4ktV~U9wxGY(j^WT3Tq7SS04uq4OC+zU(Q$OI<5KB9Y*>+iquWZk9(Md4y;@&Vl{= zI6ghY$?M_mv5Y7}`G_FEQ!ar94}r97>RPcdm*s`oSrVo} zlV#DCOw!ieOmkBciFg!4fJ@l=Tq#u;o?qbn)Hw6!&)|3-0dU3ktqkqFoUQMBAD{h) zyXjiqM@w5Xt`qQykN?&Zc7C98tkImB6Kp^9^h>??k^w*nls?G4!0$EeROY_9WCOrO zB$G*Qy6G00n_D^6(#pP*Cm6ip29nu%rVc*C-071;qU72~pt&K}h=HDMTEEFdCL< z8HPb;XBY3j{XP8c7e7zbw#iRVL#09i&Hhq>rbL2e?|dgRpC@;AnA(L4c*Oz{B`}2~ zSnO+%LV#r;FewX7+4Gs0&m!ltA$f=hw>LdOIMqQ=Q(={#9kJ=`>toI44XnLtC)G@v z|Nez9Ftm0ZzEZ^EX+C_{M@S}~pcEyiWUq{Kt1%TXc=>2W5 z+8So^jeu?2TzTbHw6wI4N;NS$I?O3O&$V~m#qyC0JonJUEKFt5en2*#r{?=;DKJb) z)Ut?}1{Q>S`$Aw?7R@bb2G(9iq_>k(o{xe4BNyoEu?J|O{HjCzMP&7>uF!Lk_A6t?&xtU3weAUas}#3V_G9G>GUa7 z5Ymf7xO(mf0b2Rk5fj&S8-C4$1A|z$NmDFF&Ua~Zz&&}E@#E+4nwrQA^b;t>o-?O# zU6Sq+BX7Iy%9}KK2P#tXTOIzsr)v?AJj1jkI{0t%rXmnZVBs z0E;9ce}~Y2-mp`e`v!D<1dMpYOukVNB5Y#0<>p&CedZMB&Yh*RyPN5;G4{+(W1?x_ zvWZRCT!|&XxVX({NQ7Y`V^Opnq2&3Tu9SId?|uR_)oPUl5-E&J%(>wnpdeUm0+K=^ zMew8TGa=FHB43b6-KjO)AxzW4wk$jianm3pB@#(0@To53DbMGqC*znMZA3e}sTh(& zljEQv)0Coh?GWADHWAgJ>vgo_<2f!W@UcyUrbL2da}#DVg-j%=MQo<>dG_t!i#9BJ zhlWr(pi-@|{fb@Oa`UaEQcG`Z`9%>_L*Hm5g#NolBB__e&oBB9jDNuN|Kw%8_vIic z!Tfii<5wGE?v2L9^4is_*05@5H4_sP96tOEg<>AGN4Zqv+-#O=rG)3YXr&0k2|NOU z6}4$<%8*H?Nw>5yIWTC_5y^Cz3A*hg4X!HN1zl^X-v~3 z@Egy7E2Y4Y28NKtrNzp&4#q~uX|@fTO%vBwlnX_wl`8r3qttAJj#aB@+pvz|`7AxF zS2A5LGdDd=rBp_0K_p^h8YbFv2^Q*zVjd|CQke{`9i6nbw$K+#P$(5pz~wu3amy`l zArgr!{gnU5G5>7{%8j(>Vfz2@^WOAxom%YLKcf$B|2EJ#W{;VFg!cD>SX%u7FNKSP zPzXU^UmxAw-BcLV3R;}SF!UBUpBdo9;Sre}QYZR6gP_H9VNW;J|B);Ex4*ca_I6nGH1fgtF;clQt!mQrIYbKR}&3OQgRK-*XrnpI~%!l%Ad*n!9_5+BVT>lt?6o z&=6=JLl~jbP@t$fHGD1Dyk#33Hf$o3$^1lJ|1XU5D;H+I+-R%cUKITKnRvN(^}nT& z0l=Mwxo_v4B*N+}A3!lIK3T3T8z5mtJh$K=#FWg@s(h?~tWpiF&<;>-m&@A1xsf zjZ*eJw7979BZx_jAq7SxN<}GbDQRj-BedYA8*kwq@3@WJLXL8&NIqY{_x-ST0Zlxf zptY@y_O^C9Iy=dvGe2<+zc5b!XKt>y8@_!b**d6M}|CdtI+}sR=i+57~h>qR1ZFXIG4Uawg1H4F-yz3D}EVK@F z1hk=1QX`~5sIUy!K+tB{M3qJ%iAJJiv)P6@%SCnIvGFm4639S@YY$4%*^;I_GZ#{n zhsq^LDTtaDc05L@QpHsPp3*puOLun<>(_7ix#y;oT5N;<1$6iyhpLCZ&{zz!S!U*D!Y;Z7XyFMVa2$sVBNwnt16`}pBqUzFN?&I?Qu+8n zKwW9-fubG+Y~HntGxK?5B!U%*5RKU=9njO$`?AjI#oC#FAu)F^c)7;f6#B1!*53b* z86{R zm|vh+b7=4C#4`+9TG}uz>r&?PuOJ-z(_d<|)dIEH%T6g?b^s99>?t911Nn&oKMzx1 zXsF3w1Vm#|`j+>hY#T2T!xe%>Hb9it2%#~Az!VxoYJ^rKER$F+hfylg)||od9L}FR z*O0rY)|!I{53ys*R-AmE%G5MbDX2LvU{C={0(w@g;KLuhlkC_iPal4s?v`fOu3JmR zcj;_z#}Ed+y}iF2clMWqsn3Jo*n2AQH{zN-rI-8WSEdDK1b+=Qv{HfDuR`riLrpGq zBohhNtX+?*HCAgIRRnmt zP169aH8V3a?BBni?DQ0snQ2tMK-`dkq*`-O@i@QvU;dD{-f#`49{4_!Q&YIU&(-VK z<3{6@9FJHkK}Say9UYzj8UP?1^RxfdXsaHk|9`!b54@rPAhtX|0etlpozl;PRxtW! z@bacCzwppnV_7x>{mZE-AET|61B5tIuBdJ-v0XU;Qo>NLIW zojh}3KaW2A(5qex(2K&Q_uhLC@4D?B?0ftPM$cX#Vi>fww1P0O>-FQXR1(UWpjo^#GoFF;2RRp_ZeC>^rCAXzkEw2exh7ic>65otdRDKFO-yK5l*IJJ_&e z3vR8#fxEwqdwzr<5S*)2aa@-xS1hCCdra3Inp#?!o6E9c!=`_|`vYX}3&nFA4J}@= zZ@%IHAa)#j0l4>-e(vXD;;+Irfqw;BYgVotV%_>phaMo8%l*VLUh3EYm1>2re&rw8wR0yu z?QQ(vt6ye(@6-I&t+(*+e(Mv=&CdghVrhZacpS&~nHG{mbMvh2>!!Uq!?G)PGUwFj z>FH%Yn`3ZrMMHKamNfi4Of+^wZ4vi~%MTuXr5}2A`IwTQp`ra|gfvM1GGEM+gAjsL zD#gZ)8?iEJ+P7^ZFF=_BAwtGotu;y$b_g1hKuU_m5(AkQ;?+9Shh89i@-&@IDF{3c z9z4MA-S=_$@IkWk*%!?SeBWnbA;;n8o@Mv4V$93N*f;f6W&m*%(6NrH*sw&T{X)U!{8X3(u7|G` z{vt!KG(u`@B|-S0qcNTwn_}EB$QrO>*LGUgtYTpOMhc}0R@A1YwT1T9PEx6KNMoi$ z#o*iRxiDYj#PN4bqyFSY5HEVvkrvT;W;MB+dB`kkc>^Stn zSM$NwvLf@x{7bCdjs9t)TOyYvwAOTY_ptV|^&Ah*5*w_9)e)Z;CdGd!(vis4;X&D^k&fonv965HJWFpCo>v3pu zl8WbX`>xBW&CYNlo26y@c1CjZB$7?UqA^ylS@TAJrEe^>zqr`la459+<5&CP*A$NR zp>21g#fM&tjTc4l??TsI4L7?Kas2o(cJIEA!m$@vcKQ@+3nh%2gO9+~8Xs|y7&sK> z3PP5^d?dzG7lv^o5tJ!$V^PfRPSOJdwD&Kky|;%*JcShr8Hlv!GIn8vb0<&X6&4sd zaty0j;g5drcR0FtABm{V;EH~lyLveD!V&gA{y4RAjgsTyYWTpr-ier;A-AxAyz+96 zr;?N+5e(Dd&2PSyn{K-Km;3HNefPiA6!&hicV8(g$HFn)csK;cr(cVK*ZhmF~aCIz-*mHmmLbc#PD*~ZVD5PPA)qxtMhD=k21+CeC>NFxABQPWw z23kryAt|^%RVQQ)ikK!zE5gu<<-}qMwqCiD?9>F``Rdn*ng(tVEOPZ3RK2hh@QQ1$ z=54p%&ZGb5UlS{r5v{Fk`}802+13i*F!;A{_r9xQ#2z zz634)R9t@WKfM+cFRBahO7Q8sRvf_eKLR9QtF50vP=fjeXt{-@NG0AVgk1eC6pKYl zj?2mM3A7hrS8Bvm$P65+aYCQ~p^>Hxbp+fR%~6{b%X%s0=TV-Afk5bxlRp(r($SQr zC(}%OJV9$Lf$94=wJOV&_weBE2dUR900anXzD7o)tlP4Y_kZeBG^aBhy!#)qN=2&C z7(MU1orf+A6GWq!ktqHBgS_*$cm47-_WTqy4F4ynyyD%tmxF1X=$)VW`?1%={q~vz zz-Rt`%>DEyx^p1j^;&KH6zU^jq#(Jm;ii`ogb<{fny6GOoE$!jol4;3@+1R|rGttCcBN%d}=P$KuZao!b~VM2?I?s#K7P*lrpJF zNmJ6;NLbpH?=-TFWo#kKx>z^sw!7!N{o_c&Hoi#qo^$qco|&E1ADZudXU~4WJ?H!0 z@Aop0<74*fRdiRBv9swQ7gm%rFgVQLeD6`bo;0@TK3|T!Vfy@8fs*^x(z?3y9wr&N zh@cS-)dN+@81Dp>2QGaT^0He501h2GNW<1T-d?|+(uANjY-OIuN3O1;%%0qcA!E%q zy_#k|4tNAH!0Qb%t+JB#{sAI?Xr#6G7`n#`Xr{jaIsu=D{Ja1MJ38@B%B8&GBCc4z zlsR+f)3RqTn|`&CczZiR4RVwaEGcI8ZL4T2E#;TLexKzlu431&-F)wn$0#c+%ihV~ zzti0E6Wxl@qlBW1$9v@WOeF23TCJ$u-(V;dj* z=dYOBe~h97pHkf2%`^o*-8?d!P-dyHVx(mmf`&p9jhG?e_Y){6BB!7bg(7Z1!lR-2 zG;#|k5iFd9CohO-UXJ$k($m~b=cmmK9PI`ahB8Pb45nW;o4L2Irl}yGjlbW-C3EJm zw{ah9@41)7ix+3_PgrZmr{kjlX85CKMlOqwv!M%s^1FIB_wEk30&9fQCZEKy+m`AHm!?h{fY( zk1?MY<<;uKRNKPJRs7_g(0*=C=?fFRM_)x?~M^-fIBI^W=Rcn-T49lD!}ZFnka^ zLAOc}v!!=IK@q;7pYC{^J)P|=T(OMiru|F_1n?U=Vi+UFp`eQ*E}(0WFh+`o3gCpeucO48Pe5sK(evirK$asS zw6z^!OI4fFX)RLg#Z|Vbf#47(1XN zX8Ues_8-&5z%YbBK|V#Lr4(LvDbuc8#*U-iY^27?R^4RP0<-{7*#=4AKe z@7V;OJY>Z&UlUPZSJjcE_6|$F00@dm_&-o`Q?kbfK+A!Pf9T!`jL_TL%dTBJ=+k!8)ich#6a_CC}E_cP@yypEyoLa zc@&m^iQ)zG@t0T7otMk|H8l(vP*z?^cXto7X3pa7yVnv31hRYbAKM0d?=vmFtw71U zR5jdkwniTl9yXbSjUsi`rD(=(Am57d@#LF31Hp?d89v<*5qf)j`KYdzzMiA(Y-phA z;e| zt*GF=k80UeyM^hcWmH^zF^5}^5F3uMZry!UR8#^PYS%qp2KPbZUzxQl*3d`7d%0S= zr8(IHTXxl?K71!i&f1yeobeUIWj_J`Ov^%~6Cy$^7UOVh3r$V?X=!feK+}HOS`IPL z-A#@NQ~Wth%Lz~z^pl_CC*Ti|mz#&z=fe~5lkoZJGjuw;duZ?Pr>(D#xW`99Q4#(? zfX>cNCQq5h)mL3ZC=@0TFfHA)dh*9w;16pd-fmqCQFp59$j_}9+ByLc6w%OIz)GuP z5GXT`4|`pwSzxT*UPS2Z?4+fog+t8;=xFcY=+O>3J31IVc8tM+0W=Jh$BPHEOEH?l zK=Aqf^rPqluxA|%d~9WuX8f`FYW~hH zs{&YlHKk$E^%&ZJTN&Xoy%WhG7^a5($QehS2o{xw*M` zM#^^c^78QeKmRP<$$t_OgT3E@zVoicJ!2G<{E-SZ{EwAEY`LNm3H=lBu%$sJe-$d8 zHn$30T&zM2^MFs+Z>)~=oC-((+Ug*7&6dZ2q?9h6mag}q>2Xt?U0kd{Vs=gb&6sn> za%{V&lSpVL&;ZP^G*H1}sC>>{6L3i``T*>I7UI&*O*VcEKgOSX~dGQU&SPyPh3(yqx5HlM6fp@vOZy%qrG%539WYg|}d zvWr-Y`CYPhwSSa{R5)tUDWX$j`?BsxeZYEPjpf07#c=UUZpEO>xiPp8_TF!8kuK(DIUXM|w}B3*EC+EvegMN3c`jcxji^hp$D+`+(1u zfQ2id{3-Aj+7iwsO-S^>fhVkU^7$fh4DBmwasB_=74TFzE&u>hA6|`;H?S)o|8%H) z)-@V+G3nm{`yaK=!|#g-qSmPDh((sc<0mBq06^-)YfPu6Z-<5o|O9LOC?e7F`47Ph@=uqO3#jg#%APx9xY} z52|p~k|u%YLP`k$fJ8!%1AlL8Q2(rvM*_DOVOG%pvAN10Yq2-3sK-@xMv9@@o1j%|a3--p3Z?2oPFZ&j$_8T$jDos<-SQ5;zl7-j0saNz^s zEpjBhOOi-*LGz2y`L0tLd`E?&FE|zaY^1aRz}W7#v>w*W490H)oHTRfC*7|`*q zxx%05bs_;l)IF)P+J8DyUI1XMPT)1{Di%7KN%PIeg5brDgm;-BgL~oA@0?yHhe0S1|_${%zIt4kyJ$=fWt3C+naWk@}7z=4DD8@EBwYw z+6VxQogLT+R63S~w+Lq31;r~t3pkdB%W)V(W*8l6mHBBYf7 zz{n{=QSTsXxuc2rroxPGK=G}v8?jRuG3a<3T7L@hPN%c^5V*yuQ+?-3+6e%Fd~j`m z{JvL#zi>Ji{3S5`4w!n2`)FVn`T%sk14q_Ftj+0c0A8mr{~mSS?~>NF*Dlgh0AS2n z=mFq4!1>A@Pd*fX4N6vnZ<^EDWG3-;XnPCVe`#eOzKM_k9wHQdG1Uru#!K1?z$g-} zx(ZPnu-a{SyeJ<``4dwN^5&8OAF;y-^zSw&{n7XAui!g9t(XR$wtDy_n~eB&j#!Rw z09H7i%LxQ$!?asq%8h1Cfy?+w^up1N(DCoiRPUXcO~7q-y7yW|MhF0aL_$8`8SHQ! zo+!!>ldpxze+&i7Op7v?FJi=?w-&no3%Y)nicMYwcpi96g`;t&lSu{{BLJgFwCc-< zdJQWZlAaHqTqwL6CV#~h12}Hd|Hky<(+8Z+=yWur^_BCH@hx%IRFr zh!%wWYA9R=1cJRvI-|3(0e@_rm0fzBA|nL=#!eL8fs%g# z@}16ST;!BN!BWUy2zd)k>#|HBb_DvjL*F)Y;twBkI-~K@hp2B6j;v4DRsOS)u>vrP z)K!<_(O*K;%}(bsVf-bg5KNj6xtE%YimC2gr1zQ)H3k~t*bZ~zr^a6W#8C1sao@Mp z(k;zSr(z`;F90xhH}Ex-yhy5S7oID=5>p6*vmsb+x*7Rrns*C!8JS4joYb+yrmN0i zletnqxDVoKIN4966;a>V$3X8fx8p|N6I~;dz8x}gZYX&f&3HsD z+ScuKDt3`o0x*iyhp$A*3qZ)}TwGFuD54%z)sYXKPQ-4qQUCx%&}gW-3sKLI?vDj7 z=SnL|9;K?`HKlOu{IHW`t<8;67%J58Q-%VUjEKOn(>b}=#xSCuVJL8k3N`#JTPHtc z@g2a)$d<(wc=RU$w|QXZVgT#WJx{77bxlqulM1*3a1tY?BToRUaX+6-L4Y?A^>^uH z)?o+k7yL9xUG-cv;|XA;)48~u7aP!wr&QI}kDX2=6>$aNEJ%HL9!eet*5H&Wsmnx( z1Fs|Mc~u?R<#aNsj4J@+M7AxsfQ0vcU>)H07EeujfFI*cyr>p#|IF!R(g9ZhCWvgl zGN0h!T0}hvlslb|3jhaD@&bdwe^o0!ObM%?bioyXb3_DJ`F~-)8ex-ud7PKoXGc^Gis0??Ti)z$H%Sli}B>yaBioxE@Gxmk-P61%3-`#G81}-MX_MR{$JFHmvk8d*3`ntpHYxykF>aUKY`e zlFh(olx$|->|O4!ytB9hkb+1gREDVKC|QW81t?hn%yc@h333=w+flL|QQJ^bqr%aH zPABDZBCY_W3DU5rn1p8mnk)cj0~I5$a=f2S-)^>+-a+v_G z0Hir0Xlz+B3tzkfL%R?q(|}^&`1h$m5K|~}PI`gqg>d{U1`Gn7KnKu1_AaUe&1fd> iYhuZk7I$?%z4?Dg0r7;C3pq*v0000lUGJ^~bL6mtEgpdFUWUSPbn(kP4IK%EgPLY91p!T`9Zr!Rnzt4wH zg{1Bo_Ws_r*V=pSwFRCIs7z`|YGyy0F^DiGep+J)D~+%+yMOK@X@KzW`&YgM(wE%x zQ*Xr9+mZf-*#0(beIbd47U8w{{^d2ygtDWXrLXW3zVa5d(pI$6t7ygmVAtU88n%BS zc4!%PU@2B$308O|@up>7|IBAdbHf{?KK=|^VLiUW3uxx9x_d@jZ^H^7i4{H^D|#HU z=EH;s>6{+AhoxTl3wr)3eEBCQtmN#H?eD;f9*-G)8)oEK63O}DBFyQR%%%sWo_!cS z`v7|38L-Q9=jF5jX80|b@l!G5rw~sr5FVtnYA9bP{i%EKXV)UE?3}kW(wD$Uyayxs zeqt?02oKVF9nRCE(w}<}f9fuLg>~~b$gsjkVKl79h@Cm(`)MEsJcDw>xx|~63J=nmfOBlS42<4@KXng67CkBt1gjRtNUo;b^daJn-NJ*k zCYE!H437K)f9Chj#JQ&__Ou@(aR#O43y3!@5gw$|;&YD3K-k8g`Ky`;K+{<#*jx@wP5uxpw#>c!ky;}57J78_L0ppG;}R`?y;GB z2rUGm#SrL#USYx5C|`Gz(kwIo7zz7g~DbiY=Z1F zkbj}33lCC@QEI)2aMwqK2k8`)8`&sB1K+I8T&K_=as(ufhs4_;dN_zc9gM|g$ghXY zQ;>NA#$N2ye(0KRzrJCIfe z(vQQ~eUN!)DVz6?~D|8}V3q zNId|GM_Nr%`PCEb)d8G4CPG4?QD8eP5ZLtR!C)n%@Vl=Rs)c+zZhQTVVKB z7`fMhx7yyazk@=@SBbSAE9Nbv#ce;7!I2+>w5ogI@N#JTAJFvf`tUJp;lqyJ2ZO(G z0pl zmmAI|xctjvUO<{n56V#ASJCrNR_~&L4(RwKG@a>0?DJjHg3)`SZw-{I=SG>)6Df9l zx#qd6HN9DObgK;aUV*RlO7$Z3whN&B0_V@3UT0W~Fz^!?_?6=lR3mN+9ztQ!mBgD4 z5_1mH+~_75?)e;=(O;blCQpX0%O)n|2y?XZ zi#44IU0-n4%sshuEYl9CV{5AbYBS@VR}pJjC1x$8xuJD3vhyTMLduOrs9T+A9sv!mN&q~~HZqpz|HwSEw~K0B#wji)L~mZ9e=7`nYOPy?Ne zcU?!kaj~d-NVDl(GQ8t6_(~fqc&dOiyf?qsgQ!*-xeK;`qoOT2R%j*To!=$V&?@Q{ z(oA|xhI_9-AAj2YMf^>$?7L3doTu6 z01bA+iXVA^&Xl4@z#(fYntRssPZ1nmQ`N_+8l;7uU&}!1Huo2Ztbjv*3ZZTfmYG!O zAUO1A5MJT>5`nRsDfHYV>k88RuBT;a*L9Ue@GE`@dZPzPJxFhYLw?|FrE$yp(6!`; z{vzuF(rl_%hWfwier-6i0uKJ(?8uOxPx2*T`S&1vu*-12OsMZ`WK;ce#vu*$|3CNZ z@sUFu3+e${rxrBgG(uq6R$3*;#`^#2;tRfpQO@G zc=_YtCP_#Oknj4w>tqzymNYbYl{-L10G55TB0wFM1e)gj=hOE5x#IskK=-d;r?Wim zX7$f56B@j_w!?jK`%k2==yFAA@t2&Po1SK$;%|k;SGbGAiZ4>!@e5fKNOL1E%ize5 z+<6vlAN7_xXST}I+nlHi7(v5U_<{wCOs;v4rw5Dm%B;(_J4%fQC_FcMK!z&n*LUO_%8S0 zPv2c#OPWpf$-u}jTzuPFoH93_=B~OfbLPEOt?9_m$)*Nm)gTRw-hi-OoQJgd%U)Lf zT$i47cJHdXwN{$I*iF^3q}j0@(m!^myP+U?lGlmzL5-)m+G6e>yN&EvudEo-!04|L zQn6mB7J{xzz0R9g!~PdQQ!5T9?EI9hsrJTJv`6|=zfphSg%^6eJLj8%i=gdeF0JWK z=^9dh`d)-ooVX9P!-9YCI&D6x{U5=0f0hUY#j=SlK?q3Yi%5IoHw9$#B`jMyNhtzM(;{Cqun%Ax{JO>q zTZcHbt9f5*Ap{N400@m>KqnH^2?hK_Lw5RIC(Y7U~ZDZSVcdB2$Wbne~K?YMfdWUoL4QI*b3Tz)t zF_0R^rwODKuP1uX|B4B!_xZ~=u^vJo<$iui?78S`AWA7|h=o|XsEHL_&78cllcNq^ zh^}jBLLh{b1?JPV`hd6jz0m(-r|`s7t*JSTKljjq|NTJ!U~c%B^c7xEd%%PKZ(Syk z6v`&0vdLo`dU){p?QGdOO#j$8!|8E~hDkv8p$Vs>opilD>3{WM=_RHmF)f?2X<=G6 zEr~E4EeSeX;~cfDjkh1(P4|KXLBCEY;6uzLvBSSnwx(9(DD=aABBl&!Zs>U#-F~6E z6+PlM>Z!tVDp#a$B+H!-Z{+8Hcn-_9i3I)le43LtDg@%q4PV_!0Je1CwWXw3HYt=$ z8sj0(f9GMGe%w;p8)LLJMhORJV4hmqu;Co%d@2Ry5BeFgmLtWKhI@bdx9Shp_Tjn# zG+#8>HZaCDw>-h)>wC~NK|B)JFOahh(AS<>Onk{S1hH^{cqD)=;l@9&=U4ZwBN+?v zfm06U{8J92r7=biga!-#9(t}(i}cgKpW1MrNsr0cmJg`;qrL>Jy2o*xXIR?? zQvCY<7r60H8!$|ZNN9epc-gijGhQMY4RQWES912rhq7{UYwaGu%EJq1ft8#3mrrj- zJ9@2n(X5AS{kzpl+&KmjyO&=?B=k~Q}}%N755 zKX*O)GNxtM<^g zt7ufQCBJ!eBiG;YG{flv;ecMdPMATJ42wd^nYAdDO$ud`LdkIEY{lzm2O#Lzk-)XL zKEXXtyna{QqS zS$)!>oOnbx9W8PE6RT0Slw|WI{^pp2So`c&{_xah%BDrg@7vuj5(xTz^p9luuRpHi zvJaiKXEkfO)OZ@~_@>hKcVF)D14HV|D;}YeIBCWLrm|u2@3%k2mi{qfA^#i)RFKXW z`PAySu=>P9Skc`w*8xXD zY=}*B02PD8+ntk7raI)0Ke>OOG&k~+R6c~Z@m(`B%uC6WFZXiSV;hOi13-7B@~l2_ z1)n(U*!=?fdd0#4E;!?8K6d6Y1axhZ|0#fyVRGlAn`+~~D{`Whcaj_3v-MfqV@01) zY(3wMB{dtS&9ClTH~m9Z9mp^(j#<*m1@Bo!V?3+`_dlGzinC5Qgpy%Riu$7=KleYk ztu_Hv@?=yOdiLgV52UK=^wFc7N&Fd_a(dve+X(u7^CF7>+qbV^MYsAyd?=uE%)#w6 z#zNSyOUu%PVAoh4%c=pSdZSZCS_RU=y8S`AUh&&;;*4~fl#(0&yrF*6)vEcffZr!r z-qA$R@2+OSJC0n;QOnvXl+8(zSUOk4vTNilDe~egY}gml?C3VBnTq~s{B1MjkHSrB z|4MistR|VJMR$7xtxfKOo5pyEj+WRY-&5e^#@ez*D^T&bs`;fxAK9@TayO*D;){w? zPa&s5^9-n1HW|v5@XZ5LYFd(x<^)Z#%96+%V`0L<{Rf!7S{=O}UFlR*R2WBIP%>Mk~I$2U4xP zMG?{?XRO}}B?IOOq<){q%e^W3$HptV&Tx91e9@S^iY`H~WnyKi+g^}P5Ibc> zR?b|sYufXLQFNb1|45eMbl&wfw)Bs&rGJdzUMo*CCPi+v(u5_=riaug@x#mUR3lI| z!3&!Q$&Qy?eg5Hf+gZPL7r{UsR5T1PQw*MZ$)ty+Cd&PQg3qHxAk^v6QzHcfI=4Ua zGEcbh9eanf{AFW5hGEr5iS^(?PQJ&KV<#KU7(`Q^dJ1(@Py3kWx-=meFB)8X%M<)% zuL=isHusHk?X6F+_Ai^U z>^C0yHujA0otqxz_J?025ee4U%P8_A%6;fU6;iK!PR%7H#3KRLZ64$c-(Sn8&weW_ zx>{(7hloZ(go8S%T#;0^z|P?;w>|U{&ur`?5e?Sg%LEoGTGByu<^4>74v(4{0yW_G zA*JLyH$6s6GD>H2gk(HQEF550D$l@hhM{x;2_$2|`kYS=szEBu6uPj|YB%w>dc@46 zTPFm`Xo!+wvavUfWshOo65S`zeLeyK-PyWbuk&<@{0J-U0#dK`ecc390bR_#AXbqd zVWrW8mGL0;R6F?^)F8FfXvzh0JxD#((vsRmG;C9GoC$gj?WqDkMKPmGmeG|Du@wQY zq4&~w$w124d1!9FXuRp1YxN;j%mcO!bb+EJ^-dGnC({1R`NtCu24-bJ3d58v>uj!Z zqbb(a$3RC~iZ}6jbncF@;bUhUgC@l6%*>LY`)WJ}sPZE%bc7C4!J10bJ0o;YAEOB| zFLtd~uhCRTZXHdc2%I#$hW6xMwxMVUbTnlj(}UDgMV3^NAI*=3rf5m+lGo6lDzKzQ zf5La~;Unf4mmlY1%hBegJ^RINf{ro4vU`-|>1!L;%teF-$_OL~x20H|SFUPGwJ zQiU|>!jc-pUPJFi>F`+AYX=pT)%cNG5>5IV6>rk-HT2$=)Z6bht^7#60nPR+ZU-rO zkb0^FQng*Lw!RQeszR!8W~3)il^Qu2Xh*aCYI{y7ZmqaBk*9eoX+m+knkDt`wxkMv zm0g0;POrf|xv-);ln!`6XxRD!w0N>r*s41~3md%#_oS}zR}`&iH;H76Q=HNcE>*nQ zCa=Lgxqwv7xY@xa@Y*jk^8IH;GWc_$c;5&JY8DSm%MB!PinGDE-dL@kXoU` zUEJ^`ui-r@7`6>+K@$Qibl4t9<4uc&9Z)Rin0~@*cu&*Diyi1D-qugwTjG^v{taD||d8~1?RpN4J)E2n0Fl4tJs@AsRMZzSG}a@m7jH>g)k zb0NFV$}x=P%N~%EOrin1ZdCk`hLJdH>X61-4ii>nmD)YZyK3T_*4yZ632#gDWcTkk zU<|3XW8@fO%`3!|A$6?jS?Uir@Z))xXX?46ueYLQ82FibtZ{&${*57xpN6fssokm6 z2Sc}c9W|e|>t-mc9R+IpI|wg2M<_#@NHz+i@f;V{^k+4T^gY#^?~{XpU#MHr#&h4q zTYaMsH~by0YDM+`$m_8AsJ=B|j;eVFz6Ols``kksPc9Hf!)g~M|0b_y)O=HEr!(!O zsB**E#FMSUHKfi(K8Vz!YIn9v&~uH~aq~$%SD|_)nDoUl8qcpza9Z4Yy$p{0RQYvf+o_J7okZ_7o54*KMqGB~A4KBMtmq!w3y_?_1{t5KfjuFN#-{GRg1 zq%VolaQ2jbcS?}P8#+X}`J?JDU<|{K?|2Mn>H z-w4~k>UHp}mxR9ma5iCDYAcJ<7pJ)3v&wf=hBV%^M3h=CboYLvYhmaXub*eLM%Owq zhLuNcFTLX~#+w$4X@?Xb-2G8ug;%+I$)2kqQzJpf)PW=T_us!d)M6 zl{Dr$8M4s+C8W>AurDpxe3@5>cebgp8MakdT0iB| z@g9fGpLY_aJ=mC?B)4`@=io)l0mk(|VPefmc55 z)K-w{d%0|XC#41dT=8R63~9V!kti(s7E+72yTJG+c=IEQd~^F@)Bkq;&Gl3zjco)eRoz5e^-bfY_RnJl4{?71yWq^D*08>m zCt&z4r`_$M>q}Unl~m;R9ng8024zRL$w<$|Xhwx6I=6lhx;_iS??E(Ol4WNVu);D) zcA%5-uIq?5E*7%_Qh?m(CK>6u1YuM-VIN%uORt1Ly9ZR&Bltepas}i!R0gQtMxpyU zVol4Zg{NsPz>yn$Rfc!`3z}Ks^pYHtHk7n*2zfkr3e>W3?`}ROz8Ro=n0QAw=&btmJb&h^^;K7n;GxCidf64Y2~OU zrHpc;ugGxE=PLJ60eo@jyck-}!K=iiWb>SQ2z_h7%2s|g{~`)qR}*VGc-lLmX1$yn z-82Dem5N3rPlm3~L$K51@6A-)0X^TYT8d;X0j(*dPSn3uhI_w=ue7mBPal8&$QHpwf&tGI=)7%b=8b=QWtYL*;KC#4PK3&eQ^425<3=J&xYiw4!pBA7|J_G zWe(o~x#yI zhK8<1&pkGC51|Dhv;+bj5bS`!A_%mAFX`kE=t=cR%E+*czv~F3L6^q~bfrn&h=z6r$W;|8NqX;gixZt0O zw!Ne78JIO08kzKn45V%&F!IaVx&U)bQj1Y;{wU>!b4VncW<~$cx-_C}dQkeu?j$gJ zL-iK{<}{pf%1s}}Xgr5_a>1xhQ zv$DTueL`k7Jt+0e9|?@zf>!SFsC>=m40Ka&JRdW0I`L%NtnTMIlQo=4k4k^;LHwz^ zYBR@Lr?SFFVKl79h@CQPe9n0T>E6l>uao}NJ@~V05mm@Sulph0m&8cC8zcFCVl79^ zxjvoq`!Di?k4ioNIC}OWG^2O!4Cnq%%*5%Ku@i{49yh1^ab9f_$`3x`0GoRpt-O8q zff+mqGkOAM^hBaAhzYsgL3_GwCE3gDByt1O| z$R4EgM48l()XaV~V-R6X{ItdpRvKYtcK-wrGQV%8lF*PMIuY0;kiO)epL!#<-j4Jy m#P+vg>kCOVw0M1S0R1;j7? - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/mu/resources/images/splash_fail.png b/mu/resources/images/splash_fail.png index a5d738421b17239683c97380ad5c24a0075b1193..436eb92883f385f04021b9c945ea86b453e157d5 100644 GIT binary patch literal 47685 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 literal 25480 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 NMI<40$4@g|MuxZ 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 literal 0 HcmV?d00001 diff --git a/mu/resources/images/splash_screen.xcf b/mu/resources/images/splash_screen.xcf deleted file mode 100644 index dac283a634715755d38c9460f8c68b635275103e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338948 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ℑLVO2#8^ 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%0D!+~CP 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 AKG8<{BVxmY8su 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 diff --git a/tests/test_resources.py b/tests/test_resources.py index 5d18993f2..b7b1c562e 100644 --- a/tests/test_resources.py +++ b/tests/test_resources.py @@ -88,7 +88,7 @@ def handler(mode, context, message): try: for current in sorted(os.listdir(images_dir)): if not current.endswith((".png", ".svg", ".gif", ".jpg")): - continue # e.g. the splash screen's GIMP source (.xcf) + continue # Not an image Qt loads. pixmap = QPixmap(os.path.join(images_dir, current)) assert not pixmap.isNull(), current finally: @@ -97,9 +97,7 @@ def handler(mode, context, message): #: Images in mu/resources/images that nothing in mu/ names, and why they stay. -UNREFERENCED_IMAGES = { - "splash_screen_base_image": "the artwork splash_screen.gif was made from", -} +UNREFERENCED_IMAGES = {} def _image_stems(): diff --git a/utils/make_artwork.py b/utils/make_artwork.py new file mode 100644 index 000000000..4704c3904 --- /dev/null +++ b/utils/make_artwork.py @@ -0,0 +1,138 @@ +""" +Draw Nu's start-up artwork from the app icon (mu/resources/images/icon.png). + +Writes, into mu/resources/images/: + +* splash_screen.png: the splash shown while Nu starts; +* splash_fail.png: the splash shown if starting fails (the bottom half is + left blank for the error text); +* modes.png: the toolbar's Mode button (Nu's logo in the yellow ring). + +Run it from the repository root after changing icon.png: + + QT_QPA_PLATFORM=offscreen python utils/make_artwork.py +""" + +import os +import sys + +from PyQt6.QtCore import QPointF, QRectF, Qt +from PyQt6.QtGui import ( + QColor, + QFont, + QFontDatabase, + QGuiApplication, + QImage, + QPainter, + QPen, +) + +IMAGES = os.path.join("mu", "resources", "images") +FONTS = os.path.join("mu", "resources", "fonts") +TITLE = "Nu: a Python editor" +URL = "github.com/kovirlabs/nu" +RING = QColor("#ffcc33") # The toolbar buttons' yellow ring. + + +def font(family, size, bold=False): + f = QFont(family) + f.setPixelSize(size) + f.setBold(bold) + return f + + +def blank(width, height): + image = QImage(width, height, QImage.Format.Format_ARGB32) + image.fill(QColor("white")) + return image + + +def draw_heading(painter, width, family): + painter.setPen(QColor("black")) + painter.setFont(font(family, 46, bold=True)) + painter.drawText(QRectF(0, 25, width, 70), Qt.AlignmentFlag.AlignCenter, TITLE) + painter.setFont(font(family, 22)) + painter.drawText(QRectF(0, 95, width, 35), Qt.AlignmentFlag.AlignCenter, URL) + + +def draw_icon(painter, icon, centre_x, top, size, grey=False): + scaled = icon.scaled( + size, + size, + Qt.AspectRatioMode.KeepAspectRatio, + Qt.TransformationMode.SmoothTransformation, + ) + if grey: + scaled = scaled.convertToFormat(QImage.Format.Format_Grayscale8) + painter.drawImage(QPointF(centre_x - scaled.width() / 2, top), scaled) + + +def splash(icon, family): + width, height = 800, 600 + image = blank(width, height) + painter = QPainter(image) + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + draw_heading(painter, width, family) + draw_icon(painter, icon, width / 2, 145, 300) + painter.setFont(font(family, 24)) + painter.drawText( + QRectF(0, 455, width, 40), + Qt.AlignmentFlag.AlignCenter, + "Starting... (this can take a minute the first time)", + ) + painter.end() + return image + + +def splash_fail(icon, family): + width, height = 800, 523 + image = blank(width, height) + painter = QPainter(image) + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + draw_heading(painter, width, family) + draw_icon(painter, icon, width / 2, 140, 150, grey=True) + painter.setPen(QPen(QColor("#808080"), 1)) + painter.drawLine(0, 307, width, 307) + painter.end() + return image + + +def mode_button(icon): + size = 256 + image = QImage(size, size, QImage.Format.Format_ARGB32) + image.fill(Qt.GlobalColor.transparent) + painter = QPainter(image) + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + ring = size * 0.075 + painter.setPen(QPen(RING, ring)) + painter.setBrush(QColor("white")) + painter.drawEllipse(QRectF(ring / 2, ring / 2, size - ring, size - ring)) + draw_icon(painter, icon, size / 2, size * 0.2, int(size * 0.6)) + painter.end() + return image + + +def main(): + app = QGuiApplication(sys.argv) # noqa: F841 (fonts need an application) + family = "Source Code Pro" + font_id = QFontDatabase.addApplicationFont( + os.path.join(FONTS, "SourceCodePro-Regular.otf") + ) + QFontDatabase.addApplicationFont(os.path.join(FONTS, "SourceCodePro-Bold.otf")) + if font_id >= 0: + family = QFontDatabase.applicationFontFamilies(font_id)[0] + icon = QImage(os.path.join(IMAGES, "icon.png")) + if icon.isNull(): + sys.exit("Run this from the repository root (no icon.png found).") + for name, image in ( + ("splash_screen.png", splash(icon, family)), + ("splash_fail.png", splash_fail(icon, family)), + ("modes.png", mode_button(icon)), + ): + path = os.path.join(IMAGES, name) + image.save(path) + print("Wrote", path) + + +if __name__ == "__main__": + main() From 008900b9183e9ecf6f21e62acec511da25913199 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 11:44:54 -0500 Subject: [PATCH 02/18] Bring the running Nu to the front when it's started again A second launch used to log "Mu is already running" and exit with no sign to the learner. Now it hands over through a QLocalServer: the running Nu comes to the front and opens any files the second launch was given (e.g. "Open with"). If the running Nu doesn't answer, a message box says so instead of nothing happening. Co-Authored-By: Claude Opus 5.5 --- mu/app.py | 114 +++++++++++++++++++++++++++++++++--- mu/interface/main.py | 10 ++++ tests/test_app.py | 135 ++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 249 insertions(+), 10 deletions(-) diff --git a/mu/app.py b/mu/app.py index 53c060d67..c815372e4 100644 --- a/mu/app.py +++ b/mu/app.py @@ -20,6 +20,8 @@ along with this program. If not, see . """ +import getpass +import json import logging from logging.handlers import TimedRotatingFileHandler import os @@ -38,7 +40,8 @@ pyqtSignal, QSharedMemory, ) -from PyQt6.QtWidgets import QApplication, QSplashScreen +from PyQt6.QtNetwork import QLocalServer, QLocalSocket +from PyQt6.QtWidgets import QApplication, QMessageBox, QSplashScreen from . import i18n from .virtual_environment import venv, logger as vlogger @@ -320,6 +323,7 @@ def __init__(self): sharedAppName = self.NAME if "MU_TEST_SUPPORT_RANDOM_APP_NAME_EXT" in os.environ: sharedAppName += os.environ["MU_TEST_SUPPORT_RANDOM_APP_NAME_EXT"] + self.name = sharedAppName self._shared_memory = QSharedMemory(sharedAppName) def __enter__(self): @@ -341,8 +345,8 @@ def acquire(self): self._shared_memory.detach() if self._shared_memory.attach(): - pid = struct.unpack("q", self._shared_memory.data()[:8]) - raise MutexError("MUTEX: Mu is already running with pid %d" % pid) + [pid] = struct.unpack("q", self._shared_memory.data()[:8]) + raise MutexError("MUTEX: Nu is already running with pid %d" % pid, pid) else: self._shared_memory.create(8) self._shared_memory.data()[:8] = struct.pack("q", os.getpid()) @@ -366,14 +370,104 @@ def is_linux_wayland(): return False -def check_only_running_once(): - """If the application is already running log the error and exit""" +def instance_server_name(): + """ + The name of the local socket the running Nu listens on, so a second + launch can hand over to it (one per user, like the lock). + """ + try: + user = getpass.getuser() + except Exception: # No user name to be had (rare); share the default. + user = "user" + return "{}-{}-open".format(_shared_memory.name, user) + + +def tell_running_instance(paths, pid=None): + """ + Ask the Nu that's already running to come to the front and open `paths` + (files the second launch was given, e.g. by "Open with"). Returns True + if it took the message. + """ + socket = QLocalSocket() + socket.connectToServer(instance_server_name()) + if not socket.waitForConnected(2000): + return False + if pid and sys.platform == "win32": # pragma: no cover (Windows only) + # Windows only lets a program take the focus if the one in front + # (this one, just launched) says it may. + import ctypes + + ctypes.windll.user32.AllowSetForegroundWindow(pid) + paths = [os.path.abspath(path) for path in paths] + socket.write(json.dumps(paths).encode("utf8")) + socket.flush() + if socket.bytesToWrite(): # Not all sent straight away: wait for it. + socket.waitForBytesWritten(2000) + sent = not socket.bytesToWrite() + socket.disconnectFromServer() + if socket.state() != QLocalSocket.LocalSocketState.UnconnectedState: + socket.waitForDisconnected(2000) + return sent + + +def listen_for_other_instances(window, editor): + """ + Listen for a second launch of Nu (see `tell_running_instance`): bring + the window to the front and open the files it passes on. Returns the + server, which must be kept alive. + """ + name = instance_server_name() + QLocalServer.removeServer(name) # A crashed Nu's leftover (Unix). + server = QLocalServer() + + def on_connection(): + socket = server.nextPendingConnection() + data = b"" + while socket.waitForReadyRead(500): + data += bytes(socket.readAll()) + data += bytes(socket.readAll()) + socket.deleteLater() + try: + paths = json.loads(data.decode("utf8") or "[]") + except ValueError: + logging.warning("Ignored a garbled message from another Nu.") + return + logging.info("Another Nu was started; opening {}".format(paths)) + window.bring_to_front() + for path in paths: + editor.direct_load(path) + + server.newConnection.connect(on_connection) + if not server.listen(name): + logging.warning( + "Can't listen for other Nu launches: {}".format(server.errorString()) + ) + return server + + +def check_only_running_once(paths=()): + """ + If Nu is already running, hand over to it (it comes to the front and + opens `paths`) and exit; if it doesn't answer, say so before exiting. + """ try: with _shared_memory: _shared_memory.acquire() except MutexError as exc: - [message] = exc.args + message, pid = exc.args logging.error(message) + if not tell_running_instance(paths, pid): + logging.error("The running Nu didn't answer.") + if "MU_SUPPRESS_CRASH_REPORT_FORM" not in os.environ: + app = QApplication.instance() or QApplication(sys.argv) # noqa: F841 + QMessageBox.information( + None, + "Nu", + _( + "Nu is already running, but isn't responding. Close " + "it (or wait for it), then start Nu again." + ), + ) sys.exit(2) @@ -391,14 +485,14 @@ def run(): - close the splash screen after startup timer ends """ setup_logging() - logging.info("\n\n-----------------\n\nStarting Mu {}".format(__version__)) + logging.info("\n\n-----------------\n\nStarting Nu {}".format(__version__)) logging.info(platform.uname()) logging.info("Process id: {}".format(os.getpid())) logging.info("Platform: {}".format(platform.platform())) logging.info("Python path: {}".format(sys.path)) logging.info("Language code: {}".format(i18n.language_code)) setup_exception_handler() - check_only_running_once() + check_only_running_once(sys.argv[1:]) # Remove the VIRTUAL_ENV env var: when set, it stops programs run in the # learner's environment (e.g. Pygame Zero games) from finding their @@ -487,7 +581,7 @@ def load_theme(theme): else: app.setStyleSheet(DAY_STYLE) - # Make sure all windows have the Mu icon as a fallback + # Make sure all windows have the Nu icon as a fallback app.setWindowIcon(load_icon(editor_window.icon)) # Create the "editor" that'll control the "window". editor = Editor(view=editor_window) @@ -506,6 +600,8 @@ def load_theme(theme): # Restore the previous session along with files passed by the os editor.restore_session(sys.argv[1:]) + # Come to the front (and open their files) when Nu is started again. + instance_server = listen_for_other_instances(editor_window, editor) # noqa: F841 # Save the exit code for sys.exit call below. exit_status = app.exec() diff --git a/mu/interface/main.py b/mu/interface/main.py index 94226f903..093c04100 100644 --- a/mu/interface/main.py +++ b/mu/interface/main.py @@ -974,6 +974,16 @@ def sync_packages(self, to_remove, to_add): package_box.setup(to_remove, to_add) package_box.exec() + def bring_to_front(self): + """ + Show the window in front of the others (e.g. when Nu is started + again while it's already running). + """ + if self.isMinimized(): + self.showNormal() + self.raise_() + self.activateWindow() + def show_message(self, message, information=None, icon=None): """ Displays a modal message to the user. diff --git a/tests/test_app.py b/tests/test_app.py index 9db146716..290245cd2 100755 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -9,6 +9,7 @@ import pytest import subprocess import threading +import time from unittest import mock import mu.app @@ -623,7 +624,10 @@ def test_running_twice(): ) ) - child1 = subprocess.run([sys.executable, cmd1]) + # Nobody answers the second launch (the first never listens), so it + # would say so in a message box: suppressed, as nobody's there to close it. + env = dict(os.environ, MU_SUPPRESS_CRASH_REPORT_FORM="1") + child1 = subprocess.run([sys.executable, cmd1], env=env) print("child 1 return code: {}".format(child1.returncode)) assert child1.returncode == 2 @@ -672,3 +676,132 @@ def test_running_twice_after_generic_exception(): test_only_running_once() # clear browser launch suppression env flag os.environ.pop("MU_SUPPRESS_CRASH_REPORT_FORM", "") + + +def test_running_again_hands_over(): + """ + When Nu is already running, a second launch hands its files to it and + exits quietly. + """ + error = mu.app.MutexError("MUTEX: Nu is already running with pid 5", 5) + with ( + mock.patch.object(mu.app._shared_memory, "acquire", side_effect=error), + mock.patch("mu.app.tell_running_instance", return_value=True) as tell, + mock.patch("mu.app.QMessageBox") as box, + pytest.raises(SystemExit) as exit_info, + ): + check_only_running_once(["a.py"]) + assert exit_info.value.code == 2 + tell.assert_called_once_with(["a.py"], 5) + box.information.assert_not_called() + + +def test_running_again_no_answer(monkeypatch): + """ + If the running Nu doesn't answer, the second launch says so (rather than + silently doing nothing) before it exits. + """ + monkeypatch.delenv("MU_SUPPRESS_CRASH_REPORT_FORM", raising=False) + error = mu.app.MutexError("MUTEX: Nu is already running with pid 5", 5) + with ( + mock.patch.object(mu.app._shared_memory, "acquire", side_effect=error), + mock.patch("mu.app.tell_running_instance", return_value=False), + mock.patch("mu.app.QMessageBox") as box, + pytest.raises(SystemExit), + ): + check_only_running_once() + box.information.assert_called_once() + assert "already running" in box.information.call_args[0][2] + + +def test_running_again_no_answer_suppressed(monkeypatch): + monkeypatch.setenv("MU_SUPPRESS_CRASH_REPORT_FORM", "1") + error = mu.app.MutexError("MUTEX: Nu is already running with pid 5", 5) + with ( + mock.patch.object(mu.app._shared_memory, "acquire", side_effect=error), + mock.patch("mu.app.tell_running_instance", return_value=False), + mock.patch("mu.app.QMessageBox") as box, + pytest.raises(SystemExit), + ): + check_only_running_once() + box.information.assert_not_called() + + +def test_instance_server_name_without_user(): + with mock.patch("mu.app.getpass.getuser", side_effect=KeyError("USER")): + name = mu.app.instance_server_name() + assert name == mu.app._shared_memory.name + "-user-open" + + +def test_tell_running_instance_nobody_listening(): + """With no Nu listening, the hand-over fails (so the caller says so).""" + assert mu.app.tell_running_instance(["a.py"]) is False + + +def _talk_to_server(server, script): + """ + Run `script` in another process (as a second launch would) while this + one handles the server's events, until it finishes. + """ + from PyQt6.QtCore import QCoreApplication + + # Each test gets a fresh lock name in the environment, but this process + # took its own at import: give the other process this one's. + suffix = mu.app._shared_memory.name[len(mu.app.SharedMemoryMutex.NAME) :] + env = dict(os.environ, MU_TEST_SUPPORT_RANDOM_APP_NAME_EXT=suffix) + child = subprocess.Popen([sys.executable, "-c", script], env=env) + deadline = time.monotonic() + 30 + while child.poll() is None and time.monotonic() < deadline: + QCoreApplication.processEvents() + time.sleep(0.01) + for _ in range(50): + QCoreApplication.processEvents() + time.sleep(0.01) + return child.wait(timeout=5) + + +def test_listen_for_other_instances(tmp_path): + """ + A second launch brings the running Nu's window to the front and opens + the files it was given. + """ + window = mock.MagicMock() + editor = mock.MagicMock() + server = mu.app.listen_for_other_instances(window, editor) + try: + assert server.isListening() + target = str(tmp_path / "game.py") + script = ( + "import sys; from mu import app; " + "sys.exit(0 if app.tell_running_instance([{!r}]) else 1)" + ).format(target) + assert _talk_to_server(server, script) == 0 + finally: + server.close() + window.bring_to_front.assert_called_once_with() + editor.direct_load.assert_called_once_with(target) + + +def test_listen_for_other_instances_garbled(): + """A message that isn't a list of paths is ignored.""" + window = mock.MagicMock() + editor = mock.MagicMock() + server = mu.app.listen_for_other_instances(window, editor) + try: + script = ( + "from PyQt6.QtNetwork import QLocalSocket; from mu import app; " + "s = QLocalSocket(); s.connectToServer(app.instance_server_name()); " + "s.waitForConnected(2000); s.write(b'{nope'); " + "s.waitForBytesWritten(2000); s.disconnectFromServer()" + ) + assert _talk_to_server(server, script) == 0 + finally: + server.close() + window.bring_to_front.assert_not_called() + editor.direct_load.assert_not_called() + + +def test_listen_for_other_instances_cannot_listen(): + with mock.patch("mu.app.QLocalServer.listen", return_value=False): + server = mu.app.listen_for_other_instances(mock.MagicMock(), mock.MagicMock()) + assert not server.isListening() From 602fa9ab7db346a1ad2366ce6b2399251b5b8071 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 11:48:32 -0500 Subject: [PATCH 03/18] Report a debugged script's real exit code A script that ended with an uncaught error under the debugger showed "exit code: 0 status: 0". The runner now returns the exit code Python would give (1 after an error, SystemExit's code otherwise) and mu_debug exits with it. mu_debug also stops normcase'ing the script path, which lower-cased it in the learner's tracebacks on Windows. Co-Authored-By: Claude Opus 5.5 --- mu/debugger/runner.py | 16 +++++++++++++++- mu/mu_debug.py | 14 ++++++++------ tests/debugger/test_runner.py | 34 ++++++++++++++++++++++++++++++++-- tests/test_app.py | 9 +++++---- 4 files changed, 60 insertions(+), 13 deletions(-) diff --git a/mu/debugger/runner.py b/mu/debugger/runner.py index e60fa66eb..5359f14a4 100644 --- a/mu/debugger/runner.py +++ b/mu/debugger/runner.py @@ -503,6 +503,9 @@ def run(hostname, port, filename, args): file=sys.stderr, ) + # The script's exit code, as Python would give it: 1 if it ended with an + # error, so the learner isn't told "exit code: 0" for a crash. + exit_code = 0 while True: try: debugger._runscript(filename) @@ -512,14 +515,25 @@ def run(hostname, port, filename, args): except Restart: # TODO: Log restart. debugger.output("restart") - except (KeyboardInterrupt, SystemExit, OSError): + except SystemExit as ex: + if ex.code is None or isinstance(ex.code, int): + exit_code = ex.code or 0 + else: # sys.exit("message") prints the message and exits with 1. + print(ex.code, file=sys.stderr) + exit_code = 1 + debugger.client = None + break + except (KeyboardInterrupt, OSError): + exit_code = 1 debugger.client = None break except Exception: msg = traceback.format_exc() debugger.output("postmortem", exception=msg) debugger.client = None + exit_code = 1 break # Close connection in a tidy manner. if debugger.client: debugger.client.shutdown(socket.SHUT_WR) + return exit_code diff --git a/mu/mu_debug.py b/mu/mu_debug.py index ba4c91b5d..7cc2f4789 100644 --- a/mu/mu_debug.py +++ b/mu/mu_debug.py @@ -19,15 +19,17 @@ def debug(filename=None, *args): """ Create a debug runner in a new process. - This is what the Mu debugger will drive. Uses the filename and associated - args found in sys.argv. + This is what Nu's debugger will drive. Uses the filename and associated + args found in sys.argv. Returns the script's exit code. """ if filename is None: print("Debugger requires a Python script filename to run.") - else: - filepath = os.path.normcase(os.path.abspath(filename)) - mu.debugger.runner.run("localhost", DEBUGGER_PORT, filepath, args) + return 2 + # Not normcase'd: that would lower-case the path in the learner's + # tracebacks on Windows (the debugger compares paths normcase'd itself). + filepath = os.path.abspath(filename) + return mu.debugger.runner.run("localhost", DEBUGGER_PORT, filepath, args) if __name__ == "__main__": - debug(*sys.argv[1:]) + sys.exit(debug(*sys.argv[1:])) diff --git a/tests/debugger/test_runner.py b/tests/debugger/test_runner.py index 699340a9b..c9ea6a5c0 100644 --- a/tests/debugger/test_runner.py +++ b/tests/debugger/test_runner.py @@ -896,8 +896,9 @@ def test_run_with_expected_exception(): mock.patch("mu.debugger.runner.sys", mock_sys), mock.patch("mu.debugger.runner.socket", mock_socket), ): - mu.debugger.runner.run("localhost", 1908, "foo.py", ["bar", "baz"]) + code = mu.debugger.runner.run("localhost", 1908, "foo.py", ["bar", "baz"]) assert mock_debugger.client is None + assert code == 0 def test_run_with_unexpected_exception(): @@ -918,6 +919,35 @@ def test_run_with_unexpected_exception(): mock.patch("mu.debugger.runner.sys", mock_sys), mock.patch("mu.debugger.runner.socket", mock_socket), ): - mu.debugger.runner.run("localhost", 1908, "foo.py", ["bar", "baz"]) + code = mu.debugger.runner.run("localhost", 1908, "foo.py", ["bar", "baz"]) assert mock_debugger.output.call_count == 1 assert mock_debugger.output.call_args_list[0][0][0] == "postmortem" + # A script that ends with an error doesn't report success. + assert code == 1 + + +@pytest.mark.parametrize( + "raised, expected", + [ + (SystemExit(3), 3), + (SystemExit("Bye!"), 1), + (KeyboardInterrupt(), 1), + ], +) +def test_run_exit_codes(raised, expected): + """ + The runner exits with the code the script would have had outside the + debugger. + """ + mock_debugger = mock.MagicMock() + mock_debugger._runscript.side_effect = raised + mock_sys = mock.MagicMock() + mock_sys.argv = [None, None] + mock_sys.path = [None] + with ( + mock.patch("mu.debugger.runner.Debugger", return_value=mock_debugger), + mock.patch("mu.debugger.runner.sys", mock_sys), + mock.patch("mu.debugger.runner.socket", mock.MagicMock()), + ): + code = mu.debugger.runner.run("localhost", 1908, "foo.py", []) + assert code == expected diff --git a/tests/test_app.py b/tests/test_app.py index 290245cd2..f8a4ffdd0 100755 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -554,10 +554,11 @@ def test_debug(): """ args = ("foo", "bar", "baz") filename = "foo.py" - expected_filename = os.path.normcase(os.path.abspath(filename)) - mock_runner = mock.MagicMock() + # The path keeps its case: it's what the learner sees in tracebacks. + expected_filename = os.path.abspath(filename) + mock_runner = mock.MagicMock(return_value=1) with mock.patch("mu.debugger.runner.run", mock_runner): - mu_debug.debug(filename, *args) + assert mu_debug.debug(filename, *args) == 1 mock_runner.assert_called_once_with( "localhost", DEBUGGER_PORT, expected_filename, args ) @@ -571,7 +572,7 @@ def test_debug_no_args(): expected_msg = "Debugger requires a Python script filename to run." mock_print = mock.MagicMock() with mock.patch("builtins.print", mock_print): - mu_debug.debug() + assert mu_debug.debug() == 2 mock_print.assert_called_once_with(expected_msg) From 8f09640825a4476e4df846499a33404bceb23fa4 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 11:48:32 -0500 Subject: [PATCH 04/18] Say when a program has finished, and ask before quitting a running one Python 3 mode runs scripts with -i, so a finished program sat at a bare >>> prompt with the Stop button still showing, looking as if it were still running. The output pane now notes, above that first prompt, that the program has finished and the learner can explore it or click Stop. Quit closed Nu (killing the program) without a word; it now asks first while a program is still running (not when it's just waiting at >>>). Also: Run no longer lower-cases the script's path (os.path.normcase), so tracebacks show the path as the learner sees it on Windows. Co-Authored-By: Claude Opus 5.5 --- mu/interface/panes.py | 29 +++++++++++++++- mu/logic.py | 25 ++++++++++++-- tests/interface/test_panes.py | 64 +++++++++++++++++++++++++++++++---- tests/test_logic.py | 50 +++++++++++++++++++++++++++ 4 files changed, 157 insertions(+), 11 deletions(-) diff --git a/mu/interface/panes.py b/mu/interface/panes.py index ab7703e7e..157a8f766 100644 --- a/mu/interface/panes.py +++ b/mu/interface/panes.py @@ -546,6 +546,9 @@ def __init__(self, parent=None): self.stdout_buffer = b"" # contains non-decoded bytes from stdout. self.reading_stdout = False # flag showing if already reading stdout. self.is_interactive = False # flag if the process is interactive mode. + # In interactive mode: whether the learner's script has finished and + # Python is waiting at its >>> prompt. + self.program_done = False # (exit code, status) of a process that ended while its output was # still being read; see finished. self.pending_finish = None @@ -588,6 +591,7 @@ def start_process( first line, so the learner sees the real command being run. """ self.is_interactive = interactive + self.program_done = False if echo: self.append((echo + "\n").encode("utf-8")) self.set_start_of_current_line() @@ -596,7 +600,7 @@ def start_process( envars = {name: v for (name, v) in envars.items() if name != "PYTHONPATH"} self.script = "" if script_name: - self.script = os.path.abspath(os.path.normcase(script_name)) + self.script = os.path.abspath(script_name) logger.info("Running script: {}".format(self.script)) logger.info("Using interpreter: {}".format(interpreter)) if interactive: @@ -962,6 +966,8 @@ def read_from_stdout(self): if data: data = self.stdout_buffer + data try: + data.decode("utf-8") # Wait for the rest of a split character. + data = self.mark_program_done(data) self.append(data) self.on_append_text.emit(data) self.set_start_of_current_line() @@ -976,6 +982,27 @@ def read_from_stdout(self): self.pending_finish = None self.finished(code, status) + def mark_program_done(self, data): + """ + In interactive mode, the first >>> prompt means the learner's script + has finished and Python is waiting for them: say so above it, as + otherwise it looks like the program is still running. Returns the + data still to show. + """ + if self.is_interactive and not self.program_done and data.endswith(b">>> "): + self.program_done = True + self.append(data[:-4]) + notice = _( + "--- Your program has finished. Type Python at the >>> " + "prompt to look at its variables, or click Stop. ---" + ) + text = self.toPlainText() + if text and not text.endswith("\n"): + notice = "\n" + notice + self.append((notice + "\n").encode("utf-8")) + return b">>> " # The prompt itself is shown as usual. + return data + def write_to_stdin(self, data): """ Writes data from the Qt application to the child process's stdin. diff --git a/mu/logic.py b/mu/logic.py index a623c496d..3ba60478e 100644 --- a/mu/logic.py +++ b/mu/logic.py @@ -1279,16 +1279,35 @@ def show_help(self): logger.info("Showing help at %r.", HELP_URL) webbrowser.open_new(HELP_URL) + def program_running(self): + """ + True if the learner's program is still running in the output pane + (not just waiting at the >>> prompt after it finished). + """ + runner = getattr(self._view, "process_runner", None) + return ( + getattr(runner, "running", False) is True + and getattr(runner, "program_done", False) is not True + ) + def quit(self, *args, **kwargs): """ Exit the application. """ + questions = [] if self._view.modified: # Alert the user to handle unsaved work. - msg = _( - "There is un-saved work, exiting the application will" - " cause you to lose it." + questions.append( + _( + "There is un-saved work, exiting the application will" + " cause you to lose it." + ) + ) + if self.program_running(): + questions.append( + _("Your program is still running. Quitting Nu will stop it.") ) + for msg in questions: result = self._view.show_confirmation(msg) if result == QMessageBox.StandardButton.Cancel: if args and hasattr(args[0], "ignore"): diff --git a/tests/interface/test_panes.py b/tests/interface/test_panes.py index f20b54ff2..cd74dce42 100644 --- a/tests/interface/test_panes.py +++ b/tests/interface/test_panes.py @@ -1108,7 +1108,7 @@ def test_PythonProcessPane_start_process(): interpreter = sys.executable working_directory = "workspace" script_filename = "script.py" - script_filepath = os.path.abspath(os.path.normcase(script_filename)) + script_filepath = os.path.abspath(script_filename) with mock.patch("mu.interface.panes.QProcess", mock_process_class): ppp = mu.interface.panes.PythonProcessPane() ppp.start_process(interpreter, script_filename, working_directory) @@ -1134,7 +1134,7 @@ def test_PythonProcessPane_start_process_command_args(): mock_process_class.ProcessChannelMode.MergedChannels = mock_merge_chans runner = sys.executable script_filename = "script.py" - script_filepath = os.path.abspath(os.path.normcase(script_filename)) + script_filepath = os.path.abspath(script_filename) with mock.patch("mu.interface.panes.QProcess", mock_process_class): ppp = mu.interface.panes.PythonProcessPane() args = ["foo", "bar"] @@ -1154,7 +1154,7 @@ def test_PythonProcessPane_start_process_debugger(): mock_process_class.ProcessChannelMode.MergedChannels = mock_merge_chans interpreter = sys.executable script_filename = "script.py" - script_filepath = os.path.abspath(os.path.normcase(script_filename)) + script_filepath = os.path.abspath(script_filename) working_directory = "workspace" with mock.patch("mu.interface.panes.QProcess", mock_process_class): ppp = mu.interface.panes.PythonProcessPane() @@ -1184,7 +1184,7 @@ def test_PythonProcessPane_start_process_not_interactive(): mock_process_class.ProcessChannelMode.MergedChannels = mock_merge_chans interpreter = sys.executable script_filename = "script.py" - script_filepath = os.path.abspath(os.path.normcase(script_filename)) + script_filepath = os.path.abspath(script_filename) with mock.patch("mu.interface.panes.QProcess", mock_process_class): ppp = mu.interface.panes.PythonProcessPane() args = ["foo", "bar"] @@ -1288,7 +1288,7 @@ def test_PythonProcessPane_start_process_custom_runner(): command_args=args, runner="foo", ) - expected_script = os.path.abspath(os.path.normcase("script.py")) + expected_script = os.path.abspath("script.py") expected_args = [expected_script, "foo", "bar"] ppp.process.start.assert_called_once_with("foo", expected_args) @@ -1312,7 +1312,7 @@ def test_PythonProcessPane_start_process_custom_python_args(): interactive=False, python_args=py_args, ) - expected_script = os.path.abspath(os.path.normcase("script.py")) + expected_script = os.path.abspath("script.py") expected_args = ["-m", "pgzero", expected_script] runner = sys.executable ppp.process.start.assert_called_once_with(runner, expected_args) @@ -2618,7 +2618,7 @@ def test_PythonProcessPane_start_process_echo(): assert ppp.toPlainText() == "$ uv run --script script.py\n" # The learner's typing starts after it. assert ppp.start_of_current_line == len(ppp.toPlainText()) - script = os.path.abspath(os.path.normcase("script.py")) + script = os.path.abspath("script.py") ppp.process.start.assert_called_once_with("/opt/uv", ["run", "--script", script]) @@ -2664,3 +2664,53 @@ def test_PythonProcessPane_insert_hint_without_uv_message(): ppp.setPlainText("$ uv run\nsomething went wrong") ppp.insert_hint("Hint: x") assert ppp.toPlainText() == "$ uv run\nsomething went wrong\nHint: x" + + +def test_PythonProcessPane_mark_program_done(): + """ + In interactive mode, the first >>> prompt (the script has finished) gets + a notice above it; later prompts don't. + """ + ppp = mu.interface.panes.PythonProcessPane() + ppp.is_interactive = True + ppp.append(b"hi") + assert ppp.mark_program_done(b"there\n>>> ") == b">>> " + assert ppp.program_done is True + text = ppp.toPlainText() + assert text.startswith("hithere\n--- Your program has finished.") + assert text.endswith("or click Stop. ---\n") + # The learner's own >>> prompts afterwards are left alone. + assert ppp.mark_program_done(b"1\n>>> ") == b"1\n>>> " + + +def test_PythonProcessPane_mark_program_done_starts_line(): + """The notice goes on a line of its own.""" + ppp = mu.interface.panes.PythonProcessPane() + ppp.is_interactive = True + ppp.append(b"no newline") + ppp.mark_program_done(b">>> ") + assert "no newline\n--- Your program has finished." in ppp.toPlainText() + + +def test_PythonProcessPane_mark_program_done_not_interactive(): + """Without the >>> prompt (e.g. Pygame Zero) nothing is added.""" + ppp = mu.interface.panes.PythonProcessPane() + ppp.is_interactive = False + assert ppp.mark_program_done(b">>> ") == b">>> " + assert ppp.program_done is False + assert ppp.toPlainText() == "" + + +def test_PythonProcessPane_read_from_stdout_program_done(): + """The prompt read from the process is shown after the notice.""" + ppp = mu.interface.panes.PythonProcessPane() + ppp.is_interactive = True + ppp.process = mock.MagicMock() + ppp.process.read.return_value = b"done\n>>> " + ppp.on_append_text = mock.MagicMock() + with mock.patch("mu.interface.panes.QTimer"): + ppp.read_from_stdout() + text = ppp.toPlainText() + assert text.startswith("done\n--- Your program has finished.") + assert text.endswith("---\n>>> ") + ppp.on_append_text.emit.assert_called_once_with(b">>> ") diff --git a/tests/test_logic.py b/tests/test_logic.py index 4b256ff83..a8253e0d8 100644 --- a/tests/test_logic.py +++ b/tests/test_logic.py @@ -3745,3 +3745,53 @@ def test_show_admin_environment_refused(): "Nu can't switch to the environment “env”.", "Nu can't use it: No pip." ) ed.show_status_message.assert_not_called() + + +def _quit_editor(running, program_done=False, answer=QMessageBox.StandardButton.Ok): + view = mock.MagicMock() + view.modified = False + view.process_runner.running = running + view.process_runner.program_done = program_done + view.show_confirmation = mock.MagicMock(return_value=answer) + view.widgets = [] + return mu.logic.Editor(view), view + + +def test_quit_program_running_cancelled(): + """ + Quitting while the learner's program is still running asks first, and + cancelling leaves everything as it is. + """ + ed, view = _quit_editor(True, answer=QMessageBox.StandardButton.Cancel) + ed.modes = {"python": mock.MagicMock()} + ed.mode = "python" + event = mock.MagicMock() + with mock.patch("PyQt6.QtCore.QCoreApplication.exit") as exit_app: + ed.quit(event) + assert "still running" in view.show_confirmation.call_args[0][0] + event.ignore.assert_called_once_with() + exit_app.assert_not_called() + + +def test_quit_program_running_ok(mocked_session): + ed, view = _quit_editor(True) + ed.modes = {"python": mock.MagicMock()} + ed.mode = "python" + with mock.patch("PyQt6.QtCore.QCoreApplication.exit") as exit_app: + ed.quit() + view.show_confirmation.assert_called_once() + exit_app.assert_called_once_with(0) + + +def test_quit_program_finished_no_question(mocked_session): + """ + A program that has finished (Python's just waiting at >>>) or nothing + running at all: no question. + """ + for running, done in ((True, True), (False, False)): + ed, view = _quit_editor(running, program_done=done) + ed.modes = {"python": mock.MagicMock()} + ed.mode = "python" + with mock.patch("PyQt6.QtCore.QCoreApplication.exit"): + ed.quit() + view.show_confirmation.assert_not_called() From b977d4dec80391ecc241e67d99e293ca801bd796 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 11:50:56 -0500 Subject: [PATCH 05/18] Install the bundled packages in one uv call; drop the 8.3-path workaround First start installed each bundled wheel with its own pip run (a pip-era guard against pip's timeout), which took a couple of minutes. One offline `uv pip install --no-index --no-deps` of all of them takes seconds. safe_short_path turned the environment's paths into Windows 8.3 short names (MU_VEN~1) to dodge a venv-launcher bug with spaces in paths (cpython#90844), fixed before Python 3.11, Nu's minimum. It made the Environment tab's copyable commands look broken; with it goes the pywin32 dependency. The Environment tab also shows paths with one kind of slash. Co-Authored-By: Claude Opus 5.5 --- mu/virtual_environment.py | 86 +++++++++---------- pyproject.toml | 3 - .../virtual_environment/test_environments.py | 55 +++++++++++- .../test_virtual_environment.py | 2 +- uv.lock | 28 +----- 5 files changed, 96 insertions(+), 78 deletions(-) diff --git a/mu/virtual_environment.py b/mu/virtual_environment.py index 75dd59937..bc93693fd 100644 --- a/mu/virtual_environment.py +++ b/mu/virtual_environment.py @@ -13,11 +13,6 @@ import time import zipfile -try: - import win32api -except ImportError: - pass - from PyQt6.QtCore import ( QObject, QProcess, @@ -39,25 +34,6 @@ ENCODING = sys.stdout.encoding if hasattr(sys.stdout, "encoding") else "utf-8" -def safe_short_path(path): - """On Windows it converts a path to a short path with 8.3 representation. - - This is to avoid an issue encountered on Windows were launching a virtual - environment python/pip process results in a 101 error exit code. - - More info: - - https://github.com/mu-editor/mu/issues/1926 - - https://bugs.python.org/issue46686 - - https://github.com/python/cpython/issues/90844 - """ - if sys.platform != "win32": - return path - try: - return win32api.GetShortPathName(path) - except Exception: - return path - - class VirtualEnvironmentError(Exception): def __init__(self, message): self.message = message @@ -888,11 +864,11 @@ def relocate(self, dirpath): # # Pip and the interpreter will be set up when the virtualenv is created # - self.interpreter = safe_short_path( - os.path.join(self._bin_directory, "python" + self._bin_extension) + self.interpreter = os.path.join( + self._bin_directory, "python" + self._bin_extension ) - self.pip_executable = safe_short_path( - os.path.join(self._bin_directory, "pip" + self._bin_extension) + self.pip_executable = os.path.join( + self._bin_directory, "pip" + self._bin_extension ) self.reset_pip() logger.debug("Virtual environment set up %s at %s", self.name, self.path) @@ -935,12 +911,16 @@ def describe(self): uv_path = find_uv() except UvNotFound: uv_path = None - activate = activate_command(self.path, self._is_windows) - python = ["--python", self.interpreter] + # normpath: one kind of slash (a folder from settings or MU_DATA_DIR + # may use / on Windows), as the learner would type it. + path = os.path.normpath(self.path) + interpreter = os.path.normpath(self.interpreter) + activate = activate_command(path, self._is_windows) + python = ["--python", interpreter] return { "name": self.display_name, - "path": self.path, - "interpreter": self.interpreter, + "path": path, + "interpreter": interpreter, "python_version": self.python_version(), "activate": activate, "install": quote_command(["uv", "pip", "install", *python, "cowsay"]), @@ -1584,7 +1564,7 @@ def create_venv(self): logger.info("Creating virtualenv: {}".format(self.path)) logger.info("Virtualenv name: {}".format(self.name)) - uv_executable = safe_short_path(find_uv()) + uv_executable = find_uv() python = self.ensure_bundled_python() seed_args = ["--seed"] if python: @@ -1637,7 +1617,7 @@ def install_jupyter_kernel(self): display_name = '"Python/Nu ({})"'.format(kernel_name) logger.info("Installing Jupyter Kernel: %s", kernel_name) ok, output = self.run_subprocess( - safe_short_path(self.interpreter), + self.interpreter, "-I", "-m", "ipykernel", @@ -1668,17 +1648,35 @@ def install_from_zipped_wheels(self, zipped_wheels_filepath): with zipfile.ZipFile(zipped_wheels_filepath) as zip: zip.extractall(unpacked_wheels_dirpath) - self.reset_pip() - # - # The wheels are installed one at a time as they reduces the possibility - # of the process installing them breaching its timeout - # - for wheel in glob.glob(os.path.join(unpacked_wheels_dirpath, "*.whl")): - logger.info( - "About to install from wheel: {}".format(os.path.basename(wheel)) + wheel_paths = sorted( + glob.glob(os.path.join(unpacked_wheels_dirpath, "*.whl")) + ) + if not wheel_paths: + return + # All in one go: uv resolves and installs them in a few seconds, + # where installing them one by one with pip took minutes on the + # learner's first start. Offline (--no-index): the installer + # ships every wheel needed. + names = [os.path.basename(wheel) for wheel in wheel_paths] + logger.info("About to install from wheels: {}".format(", ".join(names))) + self._report( + _("Installing {} packages Nu needs (no internet needed)").format( + len(names) + ) + ) + ok, output = Uv(find_uv()).run_subprocess( + "pip", + "install", + "--python", + self.interpreter, + "--no-index", + "--no-deps", + *wheel_paths, + ) + if not ok: + raise VirtualEnvironmentCreateError( + "Unable to install the bundled packages:\n%s" % compact(output) ) - self._report(_("Installing {}").format(os.path.basename(wheel))) - self.pip.install(wheel, deps=False, index=False) def install_baseline_packages(self): """ diff --git a/pyproject.toml b/pyproject.toml index ecc7204d4..ace170749 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,7 +94,6 @@ dependencies = [ # everything else Nu has) out of the plugin environment (mu/plugin/plugin_env.py). "uv>=0.9.8", "wheel", - "pywin32; sys_platform == 'win32'", # Bundled plugins (Phase 5c): separate packages under plugins/, installed # with Nu and found through their `mu.plugins` entry points like any other # plugin. In this repo uv resolves them from the workspace (see @@ -263,8 +262,6 @@ requires = [ universal_build = false [tool.briefcase.app.mu.windows] -# pywin32 is Windows-only; kept out of the cross-platform `requires` above. -requires = ["pywin32; sys_platform == 'win32'"] # The MSI UpgradeCode: how Windows recognises a new Nu installer as an upgrade # of the installed one (replacing it rather than installing alongside). It's # what Briefcase derived from the bundle id (uuid5 of "mu.kovir.org") for every diff --git a/tests/virtual_environment/test_environments.py b/tests/virtual_environment/test_environments.py index 36c664e23..444ed831d 100644 --- a/tests/virtual_environment/test_environments.py +++ b/tests/virtual_environment/test_environments.py @@ -338,17 +338,64 @@ def test_create_venv_reports_the_command(venv): assert lines[1] == "Using CPython 3.11" -def test_install_from_zipped_wheels_reports_each(venv, tmp_path): +def _wheels_archive(tmp_path, names): import zipfile archive = str(tmp_path / "wheels.zip") with zipfile.ZipFile(archive, "w") as zip: - zip.writestr("arrr-1.0-py3-none-any.whl", b"") + for name in names: + zip.writestr(name, b"") + return archive + + +def test_install_from_zipped_wheels_in_one_go(venv, tmp_path): + """ + The bundled wheels are installed with one offline `uv pip install` (not + one slow pip run per wheel). + """ + archive = _wheels_archive( + tmp_path, ["arrr-1.0-py3-none-any.whl", "boo-2.0-py3-none-any.whl"] + ) lines = [] venv.progress = lines.append - with mock.patch.object(mu.virtual_environment, "Pip"): + with ( + mock.patch.object(mu.virtual_environment, "find_uv", return_value="uv"), + mock.patch.object(UV, "run_subprocess", return_value=(True, "")) as run, + ): + venv.install_from_zipped_wheels(archive) + assert lines == ["Installing 2 packages Nu needs (no internet needed)"] + run.assert_called_once() + args = run.call_args[0] + assert args[:6] == ( + "pip", + "install", + "--python", + venv.interpreter, + "--no-index", + "--no-deps", + ) + assert [os.path.basename(arg) for arg in args[6:]] == [ + "arrr-1.0-py3-none-any.whl", + "boo-2.0-py3-none-any.whl", + ] + + +def test_install_from_zipped_wheels_fails(venv, tmp_path): + archive = _wheels_archive(tmp_path, ["arrr-1.0-py3-none-any.whl"]) + with ( + mock.patch.object(mu.virtual_environment, "find_uv", return_value="uv"), + mock.patch.object(UV, "run_subprocess", return_value=(False, "nope")), + pytest.raises(mu.virtual_environment.VirtualEnvironmentCreateError) as exc, + ): + venv.install_from_zipped_wheels(archive) + assert "nope" in exc.value.message + + +def test_install_from_zipped_wheels_empty(venv, tmp_path): + archive = _wheels_archive(tmp_path, []) + with mock.patch.object(UV, "run_subprocess") as run: venv.install_from_zipped_wheels(archive) - assert lines == ["Installing arrr-1.0-py3-none-any.whl"] + run.assert_not_called() # diff --git a/tests/virtual_environment/test_virtual_environment.py b/tests/virtual_environment/test_virtual_environment.py index 596b95e78..b30aed05c 100644 --- a/tests/virtual_environment/test_virtual_environment.py +++ b/tests/virtual_environment/test_virtual_environment.py @@ -653,7 +653,7 @@ def test_jupyter_kernel_installed(patched, venv): # packaged (Briefcase) build. # expected_jupyter_args = ( - mu.virtual_environment.safe_short_path(venv.interpreter), + venv.interpreter, "-I", "-m", "ipykernel", diff --git a/uv.lock b/uv.lock index cbc5a02a4..46218800a 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.12'", @@ -778,7 +778,7 @@ name = "importlib-metadata" version = "9.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "zipp", marker = "python_full_version < '3.12'" }, + { name = "zipp" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } wheels = [ @@ -1334,7 +1334,6 @@ dependencies = [ { name = "pyqt6-charts" }, { name = "pyqt6-qscintilla" }, { name = "pyserial" }, - { name = "pywin32", marker = "sys_platform == 'win32'" }, { name = "pyzmq" }, { name = "qtconsole" }, { name = "semver" }, @@ -1461,7 +1460,6 @@ requires-dist = [ { name = "pytest-timeout", marker = "extra == 'all'" }, { name = "pytest-timeout", marker = "extra == 'dev'" }, { name = "pytest-timeout", marker = "extra == 'tests'" }, - { name = "pywin32", marker = "sys_platform == 'win32'" }, { name = "pyzmq" }, { name = "qtconsole", specifier = ">=5.5" }, { name = "requests", marker = "extra == 'all'" }, @@ -2159,28 +2157,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, ] -[[package]] -name = "pywin32" -version = "312" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/f5/10a6e845a00fc5e7afd0a988b744f403d4d57162a28d160a093c4d9322f0/pywin32-312-cp311-cp311-win32.whl", hash = "sha256:17948aeadbdb091f0ced6ef0841620794e68327b94ee415571c1203594b7215c", size = 6362659, upload-time = "2026-06-04T07:49:21.349Z" }, - { url = "https://files.pythonhosted.org/packages/35/c4/dcd2d62b5944b6d5db53413a5899016ccd57ffcb7278f3f81655d25d2027/pywin32-312-cp311-cp311-win_amd64.whl", hash = "sha256:d11417d84412f859b722fad0841b3614459ed0047f7542d8362e77884f6b6e8a", size = 6928825, upload-time = "2026-06-04T07:49:23.934Z" }, - { url = "https://files.pythonhosted.org/packages/b7/56/3cbb433fe4501cdba2eb9040f56a4e1a8243faa4186b25295564d1a7a79d/pywin32-312-cp311-cp311-win_arm64.whl", hash = "sha256:b2200a054ca6d6625c4842fc56a4976a4b47f96b73dbe5538c3f813a80359f47", size = 6721875, upload-time = "2026-06-04T07:49:26.416Z" }, - { url = "https://files.pythonhosted.org/packages/83/ff/32aa7d2ed0ab12b323aaa64f9b75e6ad4f8fd09f9ccfc28c79414d46838d/pywin32-312-cp312-cp312-win32.whl", hash = "sha256:dab4f65ac9c4e48400a2a0530c46c3c579cd5905ecd11b80692373915269208b", size = 6371877, upload-time = "2026-06-04T07:49:28.836Z" }, - { url = "https://files.pythonhosted.org/packages/03/d9/77040d3b43df3f3be32ea289433d660d2727f5ba327bc73be835127d9d60/pywin32-312-cp312-cp312-win_amd64.whl", hash = "sha256:b457f6d628a47e8a7346ce22acb7e1a46a4a78b52e1d17e1af56871bd19a93bc", size = 6914841, upload-time = "2026-06-04T07:49:31.85Z" }, - { url = "https://files.pythonhosted.org/packages/e3/cc/7b1ec671775756020a0ee7f4feeaf3c568f0ab86bd3900088cf986937a92/pywin32-312-cp312-cp312-win_arm64.whl", hash = "sha256:6017c58e12f6809fbb0555b75df144c2922a9ffd18e4b9b5afa863b6c1a9d950", size = 6727901, upload-time = "2026-06-04T07:49:34.244Z" }, - { url = "https://files.pythonhosted.org/packages/2d/41/12fbfd7f36ed2146d8bc9de96c2741296bf0d490b98508496cff322e274c/pywin32-312-cp313-cp313-win32.whl", hash = "sha256:7a27df850933d16a8eabfbaeb73d52b273e2da667f80d70b01a89d1f6828d02c", size = 6370184, upload-time = "2026-06-04T07:49:36.253Z" }, - { url = "https://files.pythonhosted.org/packages/ba/db/36a78e3403099d31d9746d13fdcde5accc43c1155f375a34d15983a479a7/pywin32-312-cp313-cp313-win_amd64.whl", hash = "sha256:c53e878d15a1c44788082bfe712a905433473aa38f86375b7cf8b45e3acbaaf9", size = 6914298, upload-time = "2026-06-04T07:49:38.876Z" }, - { url = "https://files.pythonhosted.org/packages/84/37/c1697194092b76de9ed47ca124323f02c57ffc8a45c06f88a3d5acaf01eb/pywin32-312-cp313-cp313-win_arm64.whl", hash = "sha256:59aba5d5940842075343a5ddc6b11f1cdf0d1567fe745290359dfbcc7c2eb831", size = 6727640, upload-time = "2026-06-04T07:49:41.083Z" }, - { url = "https://files.pythonhosted.org/packages/fc/2b/1f3cded5822fd49c02f40544cbb5f58c7cfd6b1694869fd476cb6170ee97/pywin32-312-cp314-cp314-win32.whl", hash = "sha256:a77a90fbb6881238d2ca9c6fd797b25817f3768fe78d214a90137ff055a75f5b", size = 6468928, upload-time = "2026-06-04T07:49:43.188Z" }, - { url = "https://files.pythonhosted.org/packages/21/82/3bf86d2e2808902013132e1ce905a7da0da53790f3836c64bf44d55e24f3/pywin32-312-cp314-cp314-win_amd64.whl", hash = "sha256:a4dd3a848290ef724347b19f301045831d8e802fa4464f491b98b1e0a081432e", size = 7024157, upload-time = "2026-06-04T07:49:45.34Z" }, - { url = "https://files.pythonhosted.org/packages/a4/0e/73f6d6800b4f27655abd9e9f6aaeaefcddb2b946e4674efa2bab184a7f7b/pywin32-312-cp314-cp314-win_arm64.whl", hash = "sha256:9fce94568364e0155e6dfb781ac5d95903be8baf28670632beab1b523f300daa", size = 6839598, upload-time = "2026-06-04T07:49:47.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/61/caa39686032d2ebdd04ff0ab5cbe163126c0066d98e00c9018646e42393b/pywin32-312-cp315-cp315-win32.whl", hash = "sha256:5c1fbe4a937a73ae9297384a3da38518cbc694c68ad8a809b2e19acd350f03ed", size = 6471159, upload-time = "2026-06-04T07:49:50.035Z" }, - { url = "https://files.pythonhosted.org/packages/0f/cd/7e1de64a4a6f69c04214169657ccab0d93a670ea50e35eb8f489d7378249/pywin32-312-cp315-cp315-win_amd64.whl", hash = "sha256:c2f03a0f73f804a13c2735b99392b0cd426bb4f2c4d0178e5ac966a0f21618d5", size = 7025293, upload-time = "2026-06-04T07:49:54.857Z" }, - { url = "https://files.pythonhosted.org/packages/23/ed/4532e9388e65fa16b46776ef47ad631a64eda1631884488af707666350ed/pywin32-312-cp315-cp315-win_arm64.whl", hash = "sha256:a8597d28f267b39074aef51fa593530082b39cbe5a074226096857b1fed2dfb9", size = 6840337, upload-time = "2026-06-04T07:49:57.531Z" }, -] - [[package]] name = "pywin32-ctypes" version = "0.2.3" From 464e4e0d4f48d2f8b2d3d5921cd2d116fbd9ffbd Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 11:54:21 -0500 Subject: [PATCH 06/18] Friendlier REPL, pane titles and debug inspector; keep the editor roomy - The REPL greets the learner with the Python it runs instead of qtconsole's and IPython's banners (licence, "editing mode like vi or emacs" tips). - Pane titles drop developer jargon: "Python REPL" and "Python Plotter", not "Python3 (Jupyter) REPL" / "Python3 data tuple Plotter". - The debug inspector leaves out Python's own __dunder__ names (__file__, __name__, ...), showing just the learner's variables. - A pane docked below the editor starts a third of the window high: with the REPL and plotter open the editor had shrunk to a couple of lines. - Make a toolbar test independent of the fonts earlier tests leave set. Co-Authored-By: Claude Opus 5.5 --- mu/interface/main.py | 25 +++++++++++++++--- mu/interface/panes.py | 17 +++++++++++++ tests/interface/test_main.py | 48 ++++++++++++++++++++++++++++++----- tests/interface/test_panes.py | 21 +++++++++++++++ 4 files changed, 101 insertions(+), 10 deletions(-) diff --git a/mu/interface/main.py b/mu/interface/main.py index 093c04100..9ee68dd25 100644 --- a/mu/interface/main.py +++ b/mu/interface/main.py @@ -610,7 +610,7 @@ def add_python3_plotter(self, mode): plotter_pane = PlotterPane() self.data_received.connect(plotter_pane.process_tty_data) plotter_pane.data_flood.connect(mode.on_data_flood) - self.add_plotter(plotter_pane, _("Python3 data tuple")) + self.add_plotter(plotter_pane, _("Python")) def add_jupyter_repl(self, kernel_manager, kernel_client): """ @@ -621,7 +621,18 @@ def add_jupyter_repl(self, kernel_manager, kernel_client): ipython_widget.kernel_manager = kernel_manager ipython_widget.kernel_client = kernel_client ipython_widget.on_append_text.connect(self.on_stdout_write) - self.add_repl(ipython_widget, _("Python3 (Jupyter)")) + self.add_repl(ipython_widget, _("Python")) + + def give_editor_room(self, dock, area): + """ + A pane docked below the editor starts a third of the window high, so + the editor keeps most of the room (left to themselves, the panes' + preferred sizes squeezed it down to a couple of lines). + """ + if area == Qt.DockWidgetArea.BottomDockWidgetArea: + self.resizeDocks( + [dock], [max(120, self.height() // 3)], Qt.Orientation.Vertical + ) def add_repl(self, repl_pane, name): """ @@ -638,6 +649,7 @@ def add_repl(self, repl_pane, name): ) area = self._repl_area or Qt.DockWidgetArea.BottomDockWidgetArea self.addDockWidget(area, self.repl) + self.give_editor_room(self.repl, area) self.connect_zoom(self.repl_pane) self.repl_pane.set_theme(self.theme) self.repl_pane.setFocus() @@ -657,6 +669,7 @@ def add_plotter(self, plotter_pane, name): ) area = self._plotter_area or Qt.DockWidgetArea.BottomDockWidgetArea self.addDockWidget(area, self.plotter) + self.give_editor_room(self.plotter, area) self.plotter_pane.set_theme(self.theme) self.plotter_pane.setFocus() @@ -716,6 +729,7 @@ def add_python3_runner( else: area = self._runner_area or Qt.DockWidgetArea.BottomDockWidgetArea self.addDockWidget(area, self.runner) + self.give_editor_room(self.runner, area) logger.info( "About to start_process: %r, %r, %r, %r, %r, %r, %r, %r", interpreter, @@ -773,8 +787,11 @@ def update_debug_inspector(self, locals_dict): Given the contents of a dict representation of the locals in the current stack frame, update the debug inspector with the new values. """ - excluded_names = ["__builtins__", "__debug_code__", "__debug_script__"] - names = sorted([x for x in locals_dict if x not in excluded_names]) + # Python's own __dunder__ names (__file__, __name__ and the like) + # aren't the learner's variables: leave them out. + names = sorted( + x for x in locals_dict if not (x.startswith("__") and x.endswith("__")) + ) # Remove rows so we keep the same column layouts if manually set while self.debug_model.rowCount() > 0: diff --git a/mu/interface/panes.py b/mu/interface/panes.py index 157a8f766..0d3cc8558 100644 --- a/mu/interface/panes.py +++ b/mu/interface/panes.py @@ -91,6 +91,23 @@ def __init__(self, theme="day", parent=None): super().__init__(parent) self.set_theme(theme) self.console_height = 10 + self.banner = "" # Set when the kernel says which Python it runs. + + def _handle_kernel_info_reply(self, rep): + """ + Show a short, friendly banner instead of qtconsole's and IPython's + (versions, licence and "editing mode like vi or emacs" tips), with + the version of the Python the REPL runs (the learner's environment's, + which needn't be Nu's own). + """ + content = rep["content"] + version = content.get("language_info", {}).get("version", "") + self.banner = ( + _("Python {} - type some Python and press Enter to run it.").format(version) + + "\n" + ) + content["banner"] = "" + super()._handle_kernel_info_reply(rep) def _append_plain_text(self, text, *args, **kwargs): """ diff --git a/tests/interface/test_main.py b/tests/interface/test_main.py index d16559651..fea5d7d33 100644 --- a/tests/interface/test_main.py +++ b/tests/interface/test_main.py @@ -17,6 +17,17 @@ import sys +@pytest.fixture(autouse=True) +def mocked_dock_sizes(request, monkeypatch): + """ + Most tests here dock mocked panes, which Qt can't resize: the real + resizing is tested in test_Window_give_editor_room. + """ + if request.node.name == "test_Window_give_editor_room": + return + monkeypatch.setattr(mu.interface.main.Window, "resizeDocks", mock.MagicMock()) + + def test_ButtonBar_init(): """ Ensure everything is set and configured given a new instance of the @@ -129,11 +140,14 @@ def test_ButtonBar_set_responsive_mode_icons_only_when_labels_do_not_fit(): for name in ("new", "load", "save", "run", "debug", "help", "quit"): bb.addAction(name, "A rather long translated label", "tooltip") style = bb.toolButtonStyle - bb.set_responsive_mode(2000, 800) + # Plenty of room, whatever fonts the tests before this one left set up + # (the seven labels need nearly 2000 px at some font sizes). + roomy = 6000 + bb.set_responsive_mode(roomy, 800) assert style() == Qt.ToolButtonStyle.ToolButtonTextUnderIcon bb.set_responsive_mode(600, 800) assert style() == Qt.ToolButtonStyle.ToolButtonIconOnly - bb.set_responsive_mode(2000, 800) + bb.set_responsive_mode(roomy, 800) assert style() == Qt.ToolButtonStyle.ToolButtonTextUnderIcon @@ -1033,7 +1047,7 @@ def test_Window_add_python3_plotter(): w.add_python3_plotter(mock_mode) w.data_received.connect.assert_called_once_with(mock_plotter.process_tty_data) mock_plotter.data_flood.connect.assert_called_once_with(mock_mode.on_data_flood) - w.add_plotter.assert_called_once_with(mock_plotter, "Python3 data tuple") + w.add_plotter.assert_called_once_with(mock_plotter, "Python") def test_Window_add_jupyter_repl(): @@ -1058,7 +1072,7 @@ def test_Window_add_jupyter_repl(): assert mock_pane.kernel_manager == mock_kernel_manager assert mock_pane.kernel_client == mock_kernel_client mock_kernel_client.start_channels.assert_called_once_with() - w.add_repl.assert_called_once_with(mock_pane, "Python3 (Jupyter)") + w.add_repl.assert_called_once_with(mock_pane, "Python") def test_Window_add_repl(): @@ -1223,8 +1237,9 @@ def test_Window_update_debug_inspector(): w.update_debug_inspector(locals_dict) w.debug_model.rowCount.assert_called_once_with() w.debug_model.setHorizontalHeaderLabels(["Name", "Value"]) - # You just have to believe this is correct. I checked! :-) - assert mock_standard_item.call_count == 22 + # You just have to believe this is correct. I checked! :-) (Python's own + # __dunder__ names aren't shown.) + assert mock_standard_item.call_count == 18 def test_Window_update_debug_inspector_with_exception(): @@ -2456,3 +2471,24 @@ def test_Window_size_window_with_real_screens(): assert (w.x(), w.y()) == (screen.x() + 5, screen.y() + 5) w.size_window(x=screen.x() - 100000, y=screen.y() - 100000, w=300, h=200) assert w.x() == screen.x() + (screen.width() - w.geometry().width()) // 2 + + +def test_Window_give_editor_room(): + """ + A pane docked below the editor starts a third of the window high; one + docked at the side is left to Qt. + """ + from PyQt6.QtWidgets import QDockWidget + + w = mu.interface.main.Window() + w.resize(900, 900) + dock = QDockWidget("Pane") + w.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, dock) + with mock.patch.object(w, "resizeDocks") as resize: + w.give_editor_room(dock, Qt.DockWidgetArea.BottomDockWidgetArea) + resize.assert_called_once_with([dock], [300], Qt.Orientation.Vertical) + resize.reset_mock() + w.give_editor_room(dock, Qt.DockWidgetArea.LeftDockWidgetArea) + resize.assert_not_called() + # And Qt takes the real thing. + w.give_editor_room(dock, Qt.DockWidgetArea.BottomDockWidgetArea) diff --git a/tests/interface/test_panes.py b/tests/interface/test_panes.py index cd74dce42..4790f7847 100644 --- a/tests/interface/test_panes.py +++ b/tests/interface/test_panes.py @@ -2714,3 +2714,24 @@ def test_PythonProcessPane_read_from_stdout_program_done(): assert text.startswith("done\n--- Your program has finished.") assert text.endswith("---\n>>> ") ppp.on_append_text.emit.assert_called_once_with(b">>> ") + + +def test_JupyterREPLPane_friendly_banner(): + """ + The REPL greets the learner with the Python it runs, not qtconsole's and + IPython's banners. + """ + jw = mu.interface.panes.JupyterREPLPane() + rep = { + "content": { + "banner": "IPython 9 -- An enhanced Interactive Python. Tip: vi", + "language_info": {"name": "python", "version": "3.12.4"}, + } + } + with mock.patch( + "qtconsole.jupyter_widget.JupyterWidget._handle_kernel_info_reply" + ) as handler: + jw._handle_kernel_info_reply(rep) + handler.assert_called_once_with(rep) + assert rep["content"]["banner"] == "" + assert jw.banner.startswith("Python 3.12.4 - type some Python") From 4ce6f7fa315240cca04e8b77090aade118be6312 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 11:55:55 -0500 Subject: [PATCH 07/18] Mode picker: Python 3 first and plainer words; click the mode's name to change it The picker sorted modes alphabetically, so the opt-in BBC micro:bit came first and Python 3, where most learners start, last. Python 3 now leads, then the plugin modes by name, and the instructions are shorter. The status bar's mode name ("Python 3") was meant to open the picker, as in Mu, but StatusBar.connect_mode was never called. It's connected now (click only: Ctrl+Shift+M stays with the Mode button), with a tooltip and a pointing-hand cursor saying so. Co-Authored-By: Claude Opus 5.5 --- mu/interface/dialogs.py | 25 ++++++++++++------------- mu/interface/main.py | 14 ++++++++------ mu/logic.py | 3 +++ tests/interface/test_dialogs.py | 27 +++++++++++++++++++++++++++ tests/interface/test_main.py | 13 +++++++++++++ tests/test_logic.py | 1 + 6 files changed, 64 insertions(+), 19 deletions(-) diff --git a/mu/interface/dialogs.py b/mu/interface/dialogs.py index 16d8764a3..52f4a1592 100644 --- a/mu/interface/dialogs.py +++ b/mu/interface/dialogs.py @@ -74,7 +74,7 @@ def __init__(self, name, description, icon, parent=None): class ModeSelector(QDialog): """ - Defines a UI for selecting the mode for Mu. + Defines a UI for selecting the mode for Nu. """ def __init__(self, parent=None): @@ -84,12 +84,7 @@ def setup(self, modes, current_mode): self.setMinimumSize(600, 400) self.setWindowTitle(_("Select Mode")) widget_layout = QVBoxLayout() - label = QLabel( - _( - 'Please select the desired mode then click "OK". ' - 'Otherwise, click "Cancel".' - ) - ) + label = QLabel(_('Choose what you\'d like to make, then click "OK".')) label.setWordWrap(True) widget_layout.addWidget(label) self.setLayout(widget_layout) @@ -97,12 +92,16 @@ def setup(self, modes, current_mode): self.mode_list.itemDoubleClicked.connect(self.select_and_accept) widget_layout.addWidget(self.mode_list) self.mode_list.setIconSize(QSize(48, 48)) - for name, item in modes.items(): - if not item.is_debugger: - litem = ModeItem(item.name, item.description, item.icon, self.mode_list) - if item.icon == current_mode: - self.mode_list.setCurrentItem(litem) - self.mode_list.sortItems() + # Plain Python first (it's where most learners start), then the + # other modes (all from plugins) by name. + ordered = sorted( + (item for item in modes.values() if not item.is_debugger), + key=lambda item: (item.icon != "python", item.name.lower()), + ) + for item in ordered: + litem = ModeItem(item.name, item.description, item.icon, self.mode_list) + if item.icon == current_mode: + self.mode_list.setCurrentItem(litem) instructions = QLabel( _( "Change mode at any time by clicking " diff --git a/mu/interface/main.py b/mu/interface/main.py index 9ee68dd25..9b0426cc9 100644 --- a/mu/interface/main.py +++ b/mu/interface/main.py @@ -1362,7 +1362,8 @@ def __init__(self, parent=None, mode="python"): # Mode selector. self.mode_label = QLabel() - self.mode_label.setToolTip(_("Nu's current mode of behaviour.")) + self.mode_label.setToolTip(_("Nu's current mode. Click to change it.")) + self.mode_label.setCursor(Qt.CursorShape.PointingHandCursor) self.addPermanentWidget(self.mode_label) self.set_mode(mode) @@ -1387,13 +1388,14 @@ def connect_logs(self, handler, shortcut): self.logs_label.shortcut.activated.connect(handler) self.logs_label.mousePressEvent = handler - def connect_mode(self, handler, shortcut): + def connect_mode(self, handler, shortcut=None): """ - Connect the mouse press event and keyboard shortcut for the mode widget - to the referenced handler function. + Connect the mouse press event (and keyboard shortcut, if given) for + the mode widget to the referenced handler function. """ - self.mode_label.shortcut = QShortcut(QKeySequence(shortcut), self.parent()) - self.mode_label.shortcut.activated.connect(handler) + if shortcut: + self.mode_label.shortcut = QShortcut(QKeySequence(shortcut), self.parent()) + self.mode_label.shortcut.activated.connect(handler) self.mode_label.mousePressEvent = handler def connect_environment(self, handler): diff --git a/mu/logic.py b/mu/logic.py index 3ba60478e..951a5d354 100644 --- a/mu/logic.py +++ b/mu/logic.py @@ -808,6 +808,9 @@ def connect_to_status_bar(self, status_bar): status_bar.connect_logs(self.show_admin, "Ctrl+Shift+D") # Clicking the environment indicator shows the environment. status_bar.connect_environment(self.show_environment) + # Clicking the mode's name changes mode, like the Mode button (whose + # Ctrl+Shift+M it doesn't repeat: two shortcuts would clash). + status_bar.connect_mode(self.select_mode) # Show connection messages in status_bar self.connected_devices.device_connected.connect(status_bar.device_connected) # Connect to device list diff --git a/tests/interface/test_dialogs.py b/tests/interface/test_dialogs.py index 7b1908eed..bd89035d0 100644 --- a/tests/interface/test_dialogs.py +++ b/tests/interface/test_dialogs.py @@ -1984,3 +1984,30 @@ def test_PackageDialog_reject_without_a_job(): with mock.patch.object(QDialog, "reject") as reject: pd.reject() reject.assert_called_once_with() + + +def test_ModeSelector_python_first(): + """ + Python 3 comes first (where most learners start), then the other modes + by name, whatever order they were registered in. + """ + + def mode(key, name): + item = mock.MagicMock(icon=key, is_debugger=False, description="") + item.name = name # (name= would name the mock itself) + return item + + modes = { + "zebra": mode("zebra", "Zebra"), + "microbit": mode("microbit", "BBC micro:bit"), + "python": mode("python", "Python 3"), + "circuitpython": mode("circuitpython", "CircuitPython"), + } + ms = mu.interface.dialogs.ModeSelector() + from PyQt6.QtGui import QIcon + + with mock.patch("mu.interface.dialogs.load_icon", return_value=QIcon()): + ms.setup(modes, "zebra") + names = [ms.mode_list.item(i).name for i in range(ms.mode_list.count())] + assert names == ["Python 3", "BBC micro:bit", "CircuitPython", "Zebra"] + assert ms.mode_list.currentItem().name == "Zebra" diff --git a/tests/interface/test_main.py b/tests/interface/test_main.py index fea5d7d33..2a2099c45 100644 --- a/tests/interface/test_main.py +++ b/tests/interface/test_main.py @@ -2380,6 +2380,19 @@ def handler(): mock_shortcut().activated.connect.assert_called_once_with(handler) +def test_StatusBar_connect_mode_click_only(): + """Without a shortcut, just a click on the mode's name calls the handler.""" + sb = mu.interface.main.StatusBar() + + def handler(): + pass + + with mock.patch("mu.interface.main.QShortcut") as mock_shortcut: + sb.connect_mode(handler) + assert sb.mode_label.mousePressEvent == handler + mock_shortcut.assert_not_called() + + def test_StatusBar_set_message(): """ Ensure the default pause for displaying a message in the status bar is diff --git a/tests/test_logic.py b/tests/test_logic.py index a8253e0d8..547a86ec4 100644 --- a/tests/test_logic.py +++ b/tests/test_logic.py @@ -873,6 +873,7 @@ def test_editor_connect_to_status_bar(): assert sb.device_selector.device_changed.connect.call_count == 3 # Clicking the environment indicator shows the environment. sb.connect_environment.assert_called_once_with(e.show_environment) + sb.connect_mode.assert_called_once_with(e.select_mode) def test_editor_restore_session_missing_files(): From eb9e9b507b3c2b26d5bad23b8238ccfc4dc30dee Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:08:21 -0500 Subject: [PATCH 08/18] Settings dialog: no stray box on the Plugins tab, log opens at the end - The Windows 11 style drew a rounded focus frame in the empty part of the selected plugin's On column, like a second, broken checkbox. The themes now set outline: none on the list and tree views themselves (it was only on their items, which Qt doesn't read for this); the selected row's colour still shows where you are. - The Current Log tab opened at the top of the file, the oldest entries; it now opens at the end, about what just happened. - The log folder follows MU_DATA_DIR like the rest of Nu's data, so the tests and throwaway profiles never write to the real log. - The second-launch tests wait for the outcome rather than a fixed time. Co-Authored-By: Claude Opus 5.5 --- mu/interface/dialogs.py | 4 +++- mu/logic.py | 10 ++++++++-- mu/resources/css/contrast.css | 6 ++++++ mu/resources/css/day.css | 6 ++++++ mu/resources/css/night.css | 6 ++++++ tests/interface/test_dialogs.py | 2 ++ tests/test_app.py | 18 +++++++++++++----- tests/test_config.py | 11 +++++++++++ 8 files changed, 55 insertions(+), 8 deletions(-) diff --git a/mu/interface/dialogs.py b/mu/interface/dialogs.py index 52f4a1592..39dffee07 100644 --- a/mu/interface/dialogs.py +++ b/mu/interface/dialogs.py @@ -135,7 +135,7 @@ def get_mode(self): class LogWidget(QWidget): """ - Used to display Mu's logs. + Used to display Nu's logs. """ def setup(self, log): @@ -153,6 +153,8 @@ def setup(self, log): self.log_text_area.setReadOnly(True) self.log_text_area.setLineWrapMode(QPlainTextEdit.LineWrapMode.NoWrap) self.log_text_area.setPlainText(log) + # Open at the end: the newest entries, about what just happened. + self.log_text_area.moveCursor(QTextCursor.MoveOperation.End) widget_layout.addWidget(self.log_text_area) diff --git a/mu/logic.py b/mu/logic.py index 951a5d354..29574855b 100644 --- a/mu/logic.py +++ b/mu/logic.py @@ -43,8 +43,14 @@ from .virtual_environment import venv from .command_log import command_log -# The default directory for application logs. -LOG_DIR = platformdirs.user_log_dir(appname="mu", appauthor="python") +# The default directory for application logs: with the rest of Nu's data +# when MU_DATA_DIR moves it (tests, a throwaway profile), so those never +# write to the real log. +LOG_DIR = ( + os.path.join(os.environ["MU_DATA_DIR"], "logs") + if os.environ.get("MU_DATA_DIR") + else platformdirs.user_log_dir(appname="mu", appauthor="python") +) # The path to the log file for the application. LOG_FILE = os.path.join(LOG_DIR, "mu.log") #: What the Help button opens: the "Using Nu" page (docs/help.md). diff --git a/mu/resources/css/contrast.css b/mu/resources/css/contrast.css index c92b4d66b..6c8228a2c 100644 --- a/mu/resources/css/contrast.css +++ b/mu/resources/css/contrast.css @@ -32,6 +32,12 @@ QToolButton:hover, QMenu::item:selected { QStackedWidget, QWidget, QApplication, QDialog, QLabel, QStatusBar, QTabBar, QMenu, QDockWidget::title, QHeaderView, QHeaderView::section, +/* No focus frame around the current cell (the Windows 11 style draws one + beside a row's checkbox): the selected row's colour shows where you are. */ +QListWidget, QTreeView { + outline: none; +} + QListWidget, QTreeView, QTreeView::branch { background-color: black; color: white; diff --git a/mu/resources/css/day.css b/mu/resources/css/day.css index 1472d2047..90e56bd37 100644 --- a/mu/resources/css/day.css +++ b/mu/resources/css/day.css @@ -106,6 +106,12 @@ QTabWidget::tab-bar { subcontrol-position: top left; } +/* No focus frame around the current cell (the Windows 11 style draws one + beside a row's checkbox): the selected row's colour shows where you are. */ +QListWidget, QTreeView { + outline: none; +} + QListWidget, QTreeView, QTreeView::branch { background-color: white; color: black; diff --git a/mu/resources/css/night.css b/mu/resources/css/night.css index 09d73e445..b26d288eb 100644 --- a/mu/resources/css/night.css +++ b/mu/resources/css/night.css @@ -31,6 +31,12 @@ QToolButton:hover, QMenu::item:selected { QStackedWidget, QWidget, QApplication, QDialog, QLabel, QStatusBar, QTabBar, QMenu, QDockWidget::title, QHeaderView, QHeaderView::section, +/* No focus frame around the current cell (the Windows 11 style draws one + beside a row's checkbox): the selected row's colour shows where you are. */ +QListWidget, QTreeView { + outline: none; +} + QListWidget, QTreeView, QTreeView::branch { background: #222; color: white; diff --git a/tests/interface/test_dialogs.py b/tests/interface/test_dialogs.py index bd89035d0..ff556c122 100644 --- a/tests/interface/test_dialogs.py +++ b/tests/interface/test_dialogs.py @@ -117,6 +117,8 @@ def test_LogWidget_setup(): lw.setup(log) assert lw.log_text_area.toPlainText() == log assert lw.log_text_area.isReadOnly() + # It opens at the newest entries (the end). + assert lw.log_text_area.textCursor().position() == len(log) def test_EnvironmentVariablesWidget_setup(): diff --git a/tests/test_app.py b/tests/test_app.py index f8a4ffdd0..d84d92244 100755 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -739,10 +739,11 @@ def test_tell_running_instance_nobody_listening(): assert mu.app.tell_running_instance(["a.py"]) is False -def _talk_to_server(server, script): +def _talk_to_server(server, script, until=lambda: False): """ Run `script` in another process (as a second launch would) while this - one handles the server's events, until it finishes. + one handles the server's events, until it finishes and (if given) + `until()` is true, or 10 seconds after it finishes. """ from PyQt6.QtCore import QCoreApplication @@ -755,8 +756,11 @@ def _talk_to_server(server, script): while child.poll() is None and time.monotonic() < deadline: QCoreApplication.processEvents() time.sleep(0.01) - for _ in range(50): + deadline = time.monotonic() + 10 + while True: QCoreApplication.processEvents() + if until() or time.monotonic() > deadline: + break time.sleep(0.01) return child.wait(timeout=5) @@ -776,7 +780,8 @@ def test_listen_for_other_instances(tmp_path): "import sys; from mu import app; " "sys.exit(0 if app.tell_running_instance([{!r}]) else 1)" ).format(target) - assert _talk_to_server(server, script) == 0 + opened = lambda: editor.direct_load.called # noqa: E731 + assert _talk_to_server(server, script, until=opened) == 0 finally: server.close() window.bring_to_front.assert_called_once_with() @@ -795,7 +800,10 @@ def test_listen_for_other_instances_garbled(): "s.waitForConnected(2000); s.write(b'{nope'); " "s.waitForBytesWritten(2000); s.disconnectFromServer()" ) - assert _talk_to_server(server, script) == 0 + # Nothing to wait for (it's ignored), so give it a moment. + start = time.monotonic() + waited = lambda: time.monotonic() - start > 1 # noqa: E731 + assert _talk_to_server(server, script, until=waited) == 0 finally: server.close() window.bring_to_front.assert_not_called() diff --git a/tests/test_config.py b/tests/test_config.py index d0eff7406..eb8c74f72 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -80,3 +80,14 @@ def test_the_test_session_never_uses_the_real_folders(): assert not inside(path, real_workspace), path # Each test gets its own plugins folder (the temp_plugins_dir fixture). assert not inside(loader.DROPIN_DIR, real_data) + + +def test_log_dir_follows_data_dir(): + """ + With MU_DATA_DIR set (as it is for the test session) the log goes there + too, never to the real log folder. + """ + import mu.logic + + assert mu.logic.LOG_DIR == os.path.join(os.environ["MU_DATA_DIR"], "logs") + assert mu.logic.LOG_FILE.startswith(mu.logic.LOG_DIR) From 32b62ef790e72a87e3271b3330d5f277501fa978 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:12:41 -0500 Subject: [PATCH 09/18] Make a mode's workspace folders when it's first used Every mode's ensure_workspace_assets ran at every start, so a learner who only used Python 3 found Pygame Zero's fonts, images, music and sounds folders in their mu_code. Now each mode's runs the first time the mode is used in a session (including the one Nu starts in), into the same workspace as before. The plugin docs say so; the API version stays 0.5 (a 0.x bump would turn away every plugin for a timing change no plugin can notice). Also: an Unreleased section in CHANGES.md for this branch's changes. Co-Authored-By: Claude Opus 5.5 --- CHANGES.md | 34 ++++++++++++++++++++++++++++++++++ docs/modes.md | 7 ++++--- docs/plugins.md | 2 +- mu/logic.py | 14 +++++++++++--- tests/test_logic.py | 43 ++++++++++++++++++++++++++++++++++++++----- 5 files changed, 88 insertions(+), 12 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index f133ec57d..90fe30bb9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,39 @@ # Release History +## Unreleased + +### Changed + +* Nu's own artwork everywhere: the splash screen, the window icon and the + **Mode** button still showed Mu's logo and codewith.mu. +* Starting Nu while it's already running brings the open Nu to the front (and + opens any files it was given) instead of silently doing nothing. +* The first start is much faster: the bundled packages are installed with one + `uv` command instead of one pip run per package. +* When a program run with **Run** finishes, the output pane says so above the + `>>>` prompt, so it no longer looks as if it's still running. +* **Quit** asks first if a program is still running. +* The mode picker lists Python 3 first; clicking the mode's name in the status + bar opens it. +* The REPL starts with a short greeting instead of IPython's banner, panes have + plainer titles ("Python REPL", "Python Plotter"), and the debugger's variable + list leaves out Python's own `__dunder__` names. +* Panes open below the editor at a third of the window's height, so the editor + keeps most of the room. +* A mode's workspace folders (Pygame Zero's `images`, `sounds` and so on) are + made the first time the mode is used, not for every mode at every start. + For plugin authors: `ensure_workspace_assets` is now called then. + +### Fixed + +* The debugger reported "exit code: 0" for a program that ended with an error. +* Tracebacks on Windows showed the program's path in lower case. +* The Environment tab's commands used Windows short paths (`MU_VEN~1`); the + workaround behind them (for a Python bug fixed before 3.11) is gone, and so + is the `pywin32` dependency. +* The Plugins tab drew a stray empty box on the selected row (Windows 11). +* The log tab opens at the newest entries. + ## 2.0.0 The first stable release of **Nu**, a maintained continuation of the diff --git a/docs/modes.md b/docs/modes.md index 03c263afb..953d76601 100644 --- a/docs/modes.md +++ b/docs/modes.md @@ -226,9 +226,10 @@ which may be of value for you to change are: environment's variables and third-party packages. A mode may also override `ensure_workspace_assets(workspace_dir)`, which Nu -calls for every mode at startup to put what it needs into the workspace (Pygame -Zero creates its `images`, `fonts`, `sounds` and `music` folders with the -tutorials' demo files). It must leave anything already there alone. +calls the first time the mode is used in a session (including the mode Nu +starts in) to put what it needs into the workspace (Pygame Zero creates its +`images`, `fonts`, `sounds` and `music` folders with the tutorials' demo files). +It must leave anything already there alone. !!! note When creating strings that will be seen by users please remember to use diff --git a/docs/plugins.md b/docs/plugins.md index 9f1b418de..ef6186368 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -410,7 +410,7 @@ Two more things a mode can declare (new in 0.2): | Member | Meaning | |---|---| | `uses_user_environment = False` | Set it to `True` if the mode runs the learner's programs in Nu's Python environment (as Python 3 and Pygame Zero do). The admin dialog then shows that environment's variables and third-party packages. | -| `ensure_workspace_assets(workspace_dir)` | Called for every mode each time Nu starts, once the workspace exists. Put what the mode needs there (Pygame Zero makes its `images`, `fonts`, `sounds` and `music` folders and copies in demo files). Leave anything already there alone. Errors are reported like any other plugin error and don't stop Nu starting. | +| `ensure_workspace_assets(workspace_dir)` | Called the first time the mode is used each time Nu runs (including the mode Nu starts in), once the workspace exists; a mode the learner doesn't use leaves the workspace alone. Put what the mode needs there (Pygame Zero makes its `images`, `fonts`, `sounds` and `music` folders and copies in demo files). Leave anything already there alone. Errors are reported like any other plugin error and don't stop Nu starting. | Inside a mode, `self.host` is the `Host` that registered it. Use it rather than `self.editor` and `self.view`, which are the internal objects and are not diff --git a/mu/logic.py b/mu/logic.py index 29574855b..b69d39fec 100644 --- a/mu/logic.py +++ b/mu/logic.py @@ -798,9 +798,11 @@ def setup(self, modes): if not os.path.exists(wd): logger.debug("Creating directory: {}".format(wd)) os.makedirs(wd) - # Let each mode put what it needs in the workspace. - for mode in self.modes.values(): - mode.ensure_workspace_assets(wd) + # Each mode puts what it needs in the workspace when it's first used + # (see change_mode), so a mode the learner never picks (Pygame Zero's + # images, sounds... folders) doesn't fill it with folders. + self.workspace_assets_done = set() + self.workspace_assets_dir = wd # Start the timer to poll every second for an attached or removed # USB device. self._view.set_usb_checker(1, self.connected_devices.check_usb) @@ -1527,6 +1529,12 @@ def change_mode(self, mode): self.modes[self.mode].deactivate() # Re-assign to new mode. self.mode = mode + # The first time the mode's used, let it put what it needs in the + # workspace (e.g. Pygame Zero's images and sounds folders). + assets_dir = getattr(self, "workspace_assets_dir", None) + if assets_dir and mode not in self.workspace_assets_done: + self.workspace_assets_done.add(mode) + self.modes[mode].ensure_workspace_assets(assets_dir) # Activate new mode self.modes[mode].activate() # Update buttons. diff --git a/tests/test_logic.py b/tests/test_logic.py index 547a86ec4..6172481c7 100644 --- a/tests/test_logic.py +++ b/tests/test_logic.py @@ -823,10 +823,10 @@ def test_editor_setup(): e.setup(mock_modes) assert mkd.call_count == 1 assert mkd.call_args_list[0][0][0] == "foo" - # Each mode puts what it needs in the workspace (e.g. Pygame Zero's - # images and sounds folders). - mock_mode.ensure_workspace_assets.assert_called_once_with("foo") - other_mode.ensure_workspace_assets.assert_called_once_with("foo") + # Modes put what they need in the workspace when first used (see + # change_mode), not all of them at startup. + mock_mode.ensure_workspace_assets.assert_not_called() + other_mode.ensure_workspace_assets.assert_not_called() assert e.modes == mock_modes view.set_usb_checker.assert_called_once_with(1, e.connected_devices.check_usb) @@ -846,7 +846,9 @@ def test_editor_setup_new_workspace(tmp_path): assert wd.is_dir() assert not (wd / "templates").exists() assert not (wd / "static").exists() - mock_mode.ensure_workspace_assets.assert_called_once_with(str(wd)) + # The mode adds its own things when it's first used (change_mode). + mock_mode.ensure_workspace_assets.assert_not_called() + assert e.workspace_assets_dir == str(wd) def test_editor_connect_to_status_bar(): @@ -3796,3 +3798,34 @@ def test_quit_program_finished_no_question(mocked_session): with mock.patch("PyQt6.QtCore.QCoreApplication.exit"): ed.quit() view.show_confirmation.assert_not_called() + + +def test_change_mode_ensures_workspace_assets_once(): + """ + The first time a mode is used it puts what it needs in the workspace; + switching back to it later doesn't ask again. + """ + view = mock.MagicMock() + ed = mu.logic.Editor(view) + python = mock.MagicMock() + python.workspace_dir.return_value = "ws" + python.actions.return_value = [] + python.save_timeout = 0 + games = mock.MagicMock() + games.workspace_dir.return_value = "ws" + games.actions.return_value = [] + games.save_timeout = 0 + with ( + mock.patch("os.path.exists", return_value=True), + mock.patch("os.makedirs"), + ): + ed.setup({"python": python, "games": games}) + ed.mode = "python" + ed.change_mode("python") + python.ensure_workspace_assets.assert_called_once_with("ws") + games.ensure_workspace_assets.assert_not_called() + ed.change_mode("games") + ed.change_mode("python") + ed.change_mode("games") + python.ensure_workspace_assets.assert_called_once_with("ws") + games.ensure_workspace_assets.assert_called_once_with("ws") From 883cf2f9098ab6f3f757432bfce25c20aeb9ce00 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:25:42 -0500 Subject: [PATCH 10/18] Move Check's micro:bit special case out of the core check_flake expanded "from microbit import *" with a list of micro:bit names hard-coded in mu/logic.py, though the core mustn't name plugin modes. A mode can now declare star_imports (module -> the names its import * brings in); Check expands any of those generically, and the micro:bit plugin declares its own. Documented in modes.md and plugins.md as an optional member, so the API version is unchanged. Co-Authored-By: Claude Opus 5.5 --- docs/modes.md | 3 + docs/plugins.md | 1 + mu/logic.py | 58 +++++++++++-------- mu/modes/base.py | 3 + plugins/microbit/nu_microbit/mode.py | 39 +++++++++++++ .../microbit/tests/test_microbit_plugin.py | 17 ++++++ tests/test_logic.py | 35 ++++++----- 7 files changed, 118 insertions(+), 38 deletions(-) diff --git a/docs/modes.md b/docs/modes.md index 953d76601..cd8a59825 100644 --- a/docs/modes.md +++ b/docs/modes.md @@ -218,6 +218,9 @@ which may be of value for you to change are: (CircuitPython sets it: a board restarts whenever a file on it is saved). * `builtins` -- a list of strings defining symbols that Nu's code checker must assume are builtins (above and beyond Python's standard builtins). +* `star_imports` -- a dict mapping a module to the names its `import *` brings + in (the micro:bit lists `from microbit import *`'s). The code checker reads + such an import as naming them, so it can still spot undefined names. * `module_names` -- the module names the learner mustn't use for their own files, because they'd hide a real module (CircuitPython lists the modules built into CircuitPython). diff --git a/docs/plugins.md b/docs/plugins.md index ef6186368..fe46935d4 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -409,6 +409,7 @@ Two more things a mode can declare (new in 0.2): | Member | Meaning | |---|---| +| `star_imports = {}` | A dict mapping a module to the names its `import *` brings in (the micro:bit lists `from microbit import *`'s). **Check** reads such an import as naming them, so it can still spot undefined names. | | `uses_user_environment = False` | Set it to `True` if the mode runs the learner's programs in Nu's Python environment (as Python 3 and Pygame Zero do). The admin dialog then shows that environment's variables and third-party packages. | | `ensure_workspace_assets(workspace_dir)` | Called the first time the mode is used each time Nu runs (including the mode Nu starts in), once the workspace exists; a mode the learner doesn't use leaves the workspace alone. Put what the mode needs there (Pygame Zero makes its `images`, `fonts`, `sounds` and `music` folders and copies in demo files). Leave anything already there alone. Errors are reported like any other plugin error and don't stop Nu starting. | diff --git a/mu/logic.py b/mu/logic.py index b69d39fec..2a9688191 100644 --- a/mu/logic.py +++ b/mu/logic.py @@ -63,17 +63,6 @@ FLAKE_REGEX = re.compile(r".*:(\d+):(\d+):?\s+(.*)") # Regex to match undefined name errors for given builtins BUILTINS_REGEX = r"^undefined name '({})'" -# Regex to match false positive flake errors if microbit.* is expanded. -EXPAND_FALSE_POSITIVE = re.compile(r"^.*'microbit\.(\w+)' imported but unused$") -# The text to which "from microbit import \*" should be expanded. -EXPANDED_IMPORT = ( - "from microbit import pin15, pin2, pin0, pin1, " - " pin3, pin6, pin4, i2c, pin5, pin7, pin8, Image, " - "pin9, pin14, pin16, reset, pin19, temperature, " - "sleep, pin20, button_a, button_b, running_time, " - "accelerometer, display, uart, spi, panic, pin13, " - "pin12, pin11, pin10, compass" -) MOTD = [ # Candidate phrases for the message of the day (MOTD). _("Hello, World!"), _( @@ -348,7 +337,7 @@ def save_session(session): settings.session.save() -def check_flake(filename, code, builtins=None): +def check_flake(filename, code, builtins=None, star_imports=None): """ Given a filename and some code to be checked, uses the PyFlakesmodule to return a dictionary describing issues of code quality per line. See: @@ -356,24 +345,38 @@ def check_flake(filename, code, builtins=None): https://github.com/PyCQA/pyflakes If a list symbols is passed in as "builtins" these are assumed to be - additional builtins available when run by Mu. + additional builtins available when run by Nu. + + `star_imports` maps a module to the names its ``import *`` brings in + (a mode's `star_imports`, e.g. the micro:bit's ``from microbit import + *``): the import is checked as if it named them, so pyflakes can still + spot undefined names, and the names left unused aren't reported. """ - import_all = "from microbit import *" in code - if import_all: - # Massage code so "from microbit import *" is expanded so the symbols - # are known to flake. - code = code.replace("from microbit import *", EXPANDED_IMPORT) + expanded = [] + for module, names in (star_imports or {}).items(): + star = "from {} import *".format(module) + if star in code and names: + # On one line, so the line numbers stay the same. + code = code.replace( + star, "from {} import {}".format(module, ", ".join(names)) + ) + expanded.append(module) + unused_expanded = None + if expanded: + unused_expanded = re.compile( + r"^'({})\.\w+' imported but unused$".format( + "|".join(re.escape(module) for module in expanded) + ) + ) reporter = MuFlakeCodeReporter() check(code, filename, reporter) if builtins: builtins_regex = re.compile(BUILTINS_REGEX.format("|".join(builtins))) feedback = {} for log in reporter.log: - if import_all: - # Guard to stop unwanted "microbit.* imported but unused" messages. - message = log["message"] - if EXPAND_FALSE_POSITIVE.match(message): - continue + if unused_expanded and unused_expanded.match(log["message"]): + # Names an expanded "import *" brought in but the code didn't use. + continue if builtins: if builtins_regex.match(log["message"]): continue @@ -1255,8 +1258,13 @@ def check_code(self): logger.info("Checking code.") self._view.reset_annotations() filename = tab.path if tab.path else _("untitled") - builtins = self.modes[self.mode].builtins - flake = check_flake(filename, tab.text(), builtins) + mode = self.modes[self.mode] + flake = check_flake( + filename, + tab.text(), + mode.builtins, + getattr(mode, "star_imports", None), + ) if flake: logger.info(flake) self._view.annotate_code(flake, "error") diff --git a/mu/modes/base.py b/mu/modes/base.py index 70288623e..40620c462 100644 --- a/mu/modes/base.py +++ b/mu/modes/base.py @@ -174,6 +174,9 @@ class BaseMode(QObject): has_debugger = False save_timeout = 5 #: Number of seconds to wait before saving work. builtins = None #: Symbols to assume as builtins when checking code style. + #: Modules whose ``import *`` Check should expand, each mapped to the + #: names it brings in, so it can still spot undefined names. + star_imports = {} file_extensions = [] module_names = MODULE_NAMES code_template = _("# Write your code here :-)") diff --git a/plugins/microbit/nu_microbit/mode.py b/plugins/microbit/nu_microbit/mode.py index 176bbbf3c..740d2a184 100644 --- a/plugins/microbit/nu_microbit/mode.py +++ b/plugins/microbit/nu_microbit/mode.py @@ -52,6 +52,45 @@ class MicrobitMode(MicroPythonMode): # Every micro:bit's USB interface (DAPLink) has these ids. # VID, PID, manufacturer, name valid_boards = [(board.MICROBIT_VID, board.MICROBIT_PID, None, "BBC micro:bit")] + #: What "from microbit import *" brings in, so Check can still spot + #: undefined names in code that uses it. + star_imports = { + "microbit": [ + "accelerometer", + "button_a", + "button_b", + "compass", + "display", + "i2c", + "Image", + "panic", + "pin0", + "pin1", + "pin2", + "pin3", + "pin4", + "pin5", + "pin6", + "pin7", + "pin8", + "pin9", + "pin10", + "pin11", + "pin12", + "pin13", + "pin14", + "pin15", + "pin16", + "pin19", + "pin20", + "reset", + "running_time", + "sleep", + "spi", + "temperature", + "uart", + ] + } # Modules built into micro:bit MicroPython, which the learner's files # mustn't shadow. diff --git a/plugins/microbit/tests/test_microbit_plugin.py b/plugins/microbit/tests/test_microbit_plugin.py index 3dcc40b63..0d3a60ca1 100644 --- a/plugins/microbit/tests/test_microbit_plugin.py +++ b/plugins/microbit/tests/test_microbit_plugin.py @@ -499,3 +499,20 @@ def test_flash_with_no_microbit_end_to_end(mm, host): **{"microbit-flash": True, "repl": True, "plotter": True} ) assert mode_module.FLASH_BUTTON == "microbit-flash" + + +def test_check_understands_from_microbit_import_star(): + """ + With the mode's star_imports, Check reads "from microbit import *" as + naming the micro:bit's things: no noise about the star import, and a + real undefined name is still caught. + """ + import mu.logic + from nu_microbit.mode import MicrobitMode + + code = "from microbit import *\ndisplay.scroll('hi')\nsleep(10)\nprint(oops)\n" + result = mu.logic.check_flake( + "main.py", code, star_imports=MicrobitMode.star_imports + ) + messages = [log["message"] for logs in result.values() for log in logs] + assert messages == ["undefined name 'oops'"] diff --git a/tests/test_logic.py b/tests/test_logic.py index 6172481c7..c030a22f4 100644 --- a/tests/test_logic.py +++ b/tests/test_logic.py @@ -475,20 +475,29 @@ def test_check_flake(): def test_check_flake_needing_expansion(): """ - Ensure the check_flake method calls PyFlakes with the expected code - reporter. + A mode's star import is checked as if it named what it brings in: the + names the code doesn't use aren't reported, its undefined names are. """ - mock_r = mock.MagicMock() - msg = "'microbit.foo' imported but unused" - mock_r.log = [{"line_no": 2, "column": 0, "message": msg}] - with ( - mock.patch("mu.logic.MuFlakeCodeReporter", return_value=mock_r), - mock.patch("mu.logic.check", return_value=None) as mock_check, - ): - code = "from microbit import *" - result = mu.logic.check_flake("foo.py", code) - assert result == {} - mock_check.assert_called_once_with(mu.logic.EXPANDED_IMPORT, "foo.py", mock_r) + code = "from robot import *\nwheels.turn(1)\nprint(oops)\n" + result = mu.logic.check_flake( + "foo.py", code, star_imports={"robot": ["wheels", "eyes", "horn"]} + ) + messages = [log["message"] for logs in result.values() for log in logs] + assert messages == ["undefined name 'oops'"] + assert list(result) == [2] # (Line numbers count from 0.) + + +def test_check_flake_star_import_not_expanded(): + """ + Another module's star import is left alone (pyflakes reports it as + usual), and a mode without star imports changes nothing. + """ + code = "from os.path import *\nprint(join)\n" + plain = mu.logic.check_flake("foo.py", code) + assert mu.logic.check_flake("foo.py", code, star_imports={"robot": ["x"]}) == ( + plain + ) + assert any("import *" in log["message"] for log in plain[0]) def test_check_flake_with_builtins(): From c96cd1f767a03d848a88745e0d68881961042d03 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:30:19 -0500 Subject: [PATCH 11/18] Remove dead code left by Mu's removed modes - MicroPythonREPLConnection.execute/send_commands (and the raw-mode constants only they used): the "run on device" plumbing of the removed Pyboard/ESP modes. - The remove_fs hook in change_mode and the plugin error guard: no mode has had a file-system pane since the FileSystemPane went. - AdminDialog.setup / Window.show_admin's device_list argument, which nothing read. - PythonProcessPane._del_ (a never-called typo for __del__), EditorPane.find_next_match (used only by its own test) and a commented-out block in restore_session. Co-Authored-By: Claude Opus 5.5 --- mu/interface/dialogs.py | 1 - mu/interface/editor.py | 27 ------------------- mu/interface/main.py | 2 -- mu/interface/panes.py | 3 --- mu/logic.py | 11 +------- mu/modes/base.py | 40 +--------------------------- mu/plugin/errors.py | 1 - tests/interface/test_dialogs.py | 20 +++++--------- tests/interface/test_editor.py | 24 ----------------- tests/interface/test_main.py | 8 ++---- tests/modes/test_base.py | 47 --------------------------------- tests/test_logic.py | 1 - 12 files changed, 10 insertions(+), 175 deletions(-) diff --git a/mu/interface/dialogs.py b/mu/interface/dialogs.py index 39dffee07..58254ab5a 100644 --- a/mu/interface/dialogs.py +++ b/mu/interface/dialogs.py @@ -1358,7 +1358,6 @@ def setup( settings, packages, mode, - device_list, environment=None, focus=None, plugins=None, diff --git a/mu/interface/editor.py b/mu/interface/editor.py index eeb6ba997..06ccf84d2 100644 --- a/mu/interface/editor.py +++ b/mu/interface/editor.py @@ -435,33 +435,6 @@ def show_annotations(self): # aren't ints, so pass its value to keep the same style. self.annotate(line, text, self.annotationDisplay().value) - def find_next_match( - self, - text, - from_line=-1, - from_col=-1, - case_sensitive=True, - wrap_around=True, - ): - """ - Finds the next text match from the current cursor, or the given - position, and selects it (the automatic selection is the only available - QsciScintilla behaviour). - Returns True if match found, False otherwise. - """ - return self.findFirst( - text, # Text to find, - False, # Treat as regular expression - case_sensitive, # Case sensitive search - True, # Whole word matches only - wrap_around, # Wrap search - forward=True, # Forward search - line=from_line, # -1 starts at current position - index=from_col, # -1 starts at current position - show=False, # Unfolds found text - posix=False, - ) # More POSIX compatible RegEx - def range_from_positions(self, start_position, end_position): """Given a start-end pair, such as are provided by a regex match, return the corresponding Scintilla line-offset pairs which are diff --git a/mu/interface/main.py b/mu/interface/main.py index 9b0426cc9..5ed92d64d 100644 --- a/mu/interface/main.py +++ b/mu/interface/main.py @@ -949,7 +949,6 @@ def show_admin( settings, packages, mode, - device_list, environment=None, focus=None, plugins=None, @@ -970,7 +969,6 @@ def show_admin( settings, packages, mode, - device_list, environment=environment, focus=focus, plugins=plugins, diff --git a/mu/interface/panes.py b/mu/interface/panes.py index 0d3cc8558..7811d616e 100644 --- a/mu/interface/panes.py +++ b/mu/interface/panes.py @@ -697,9 +697,6 @@ def stop_process(self): self.process.waitForFinished() self.running = False - def _del_(self): - self.stop_process() - def finished(self, code, status): """ Handle when the child process finishes. diff --git a/mu/logic.py b/mu/logic.py index 2a9688191..e9d9e2c57 100644 --- a/mu/logic.py +++ b/mu/logic.py @@ -887,12 +887,6 @@ def restore_session(self, paths=None): old_window = old_session.get("window", {}) self._view.size_window(**old_window) - # - # Doesn't seem to do anything useful - # - # ~ if old_session is None: - # ~ self._view.set_theme(self.theme) - # handle os passed file last, # so it will not be focused over by another tab if paths and len(paths) > 0: @@ -1412,7 +1406,6 @@ def show_admin(self, event=None, focus=None): settings, "\n".join(packages), mode, - self.connected_devices, environment=environment, focus=focus, plugins=plugins, @@ -1524,12 +1517,10 @@ def change_mode(self, mode): Given the name of a mode, will make the necessary changes to put the editor into the new mode. """ - # Remove the old mode's REPL / filesystem / plotter if required. + # Remove the old mode's REPL / plotter if required. old_mode = self.modes[self.mode] if hasattr(old_mode, "remove_repl"): old_mode.remove_repl() - if hasattr(old_mode, "remove_fs"): - old_mode.remove_fs() if hasattr(old_mode, "remove_plotter"): if old_mode.plotter: old_mode.remove_plotter() diff --git a/mu/modes/base.py b/mu/modes/base.py index 40620c462..7d1daf047 100644 --- a/mu/modes/base.py +++ b/mu/modes/base.py @@ -26,14 +26,12 @@ import pkgutil from serial import Serial from PyQt6.QtSerialPort import QSerialPort, QSerialPortInfo -from PyQt6.QtCore import QObject, pyqtSignal, QIODevice, QTimer +from PyQt6.QtCore import QObject, pyqtSignal, QIODevice from mu.logic import Device from .. import config, settings -ENTER_RAW_MODE = b"\x01" # CTRL-A EXIT_RAW_MODE = b"\x02" # CTRL-B KEYBOARD_INTERRUPT = b"\x03" # CTRL-C -SOFT_REBOOT = b"\x04" # CTRL-C logger = logging.getLogger(__name__) @@ -122,42 +120,6 @@ def send_interrupt(self): self.write(EXIT_RAW_MODE) # CTRL-B self.write(KEYBOARD_INTERRUPT) # CTRL-C - def execute(self, commands): - """ - Execute a series of commands over a period of time (scheduling - remaining commands to be run in the next iteration of the event loop). - """ - if commands: - command = commands[0] - logger.info("Sending command {}".format(command)) - self.write(command) - remainder = commands[1:] - remaining_task = lambda commands=remainder: self.execute(commands) - QTimer.singleShot(2, remaining_task) - - def send_commands(self, commands): - """ - Send commands to the REPL via raw mode. - """ - # Sequence of commands to get into raw mode (From pyboard.py). - raw_on = [ - KEYBOARD_INTERRUPT, - KEYBOARD_INTERRUPT, - ENTER_RAW_MODE, - SOFT_REBOOT, - KEYBOARD_INTERRUPT, - KEYBOARD_INTERRUPT, - ] - - newline = [b'print("\\n");'] - commands = [c.encode("utf-8") + b"\r" for c in commands] - commands.append(b"\r") - commands.append(SOFT_REBOOT) - raw_off = [EXIT_RAW_MODE] - command_sequence = raw_on + newline + commands + raw_off - logger.info(command_sequence) - self.execute(command_sequence) - class BaseMode(QObject): """ diff --git a/mu/plugin/errors.py b/mu/plugin/errors.py index 06eebf6f0..3b9d3f83b 100644 --- a/mu/plugin/errors.py +++ b/mu/plugin/errors.py @@ -84,7 +84,6 @@ def _workspace_dir_fallback(): "open_file": None, "remove_repl": None, "remove_plotter": None, - "remove_fs": None, "ensure_workspace_assets": None, } diff --git a/tests/interface/test_dialogs.py b/tests/interface/test_dialogs.py index ff556c122..6fe8cfdd7 100644 --- a/tests/interface/test_dialogs.py +++ b/tests/interface/test_dialogs.py @@ -160,10 +160,8 @@ def test_AdminDialog_setup_python_mode(): mode.short_name = "a-mode-that-runs-code" mode.name = "Python 3" mode.uses_user_environment = True - modes = mock.MagicMock() - device_list = mu.logic.DeviceList(modes) ad = mu.interface.dialogs.AdminDialog(mock_window) - ad.setup(log, settings, packages, mode, device_list) + ad.setup(log, settings, packages, mode) assert ad.log_widget.log_text_area.toPlainText() == log s = ad.settings() assert s["packages"] == packages @@ -188,7 +186,6 @@ def test_AdminDialog_focus_environment(): {"envars": "", "locale": ""}, "", _python_mode(), - None, focus="environment", ) assert ad.tabs.currentWidget() is ad.environment_tab @@ -208,7 +205,7 @@ def test_AdminDialog_focus_environment_in_other_modes(): mode.uses_user_environment = False parent = QWidget() ad = mu.interface.dialogs.AdminDialog(parent) - ad.setup("log", {"locale": ""}, "", mode, None, focus="environment") + ad.setup("log", {"locale": ""}, "", mode, focus="environment") assert ad.tabs.currentWidget() is ad.log_widget @@ -227,7 +224,6 @@ def test_AdminDialog_commands_tab_in_other_modes(): {"locale": ""}, "", mode, - None, environment={"commands": "$ mpremote connect COM3 fs cp a.py :main.py"}, ) assert ad.environment_tab is None @@ -261,10 +257,8 @@ def test_AdminDialog_setup(): mode.short_name = "python" mode.name = "Debugger" mode.uses_user_environment = False - modes = mock.MagicMock() - device_list = mu.logic.DeviceList(modes) ad = mu.interface.dialogs.AdminDialog(mock_window) - ad.setup(log, settings, packages, mode, device_list) + ad.setup(log, settings, packages, mode) assert ad.log_widget.log_text_area.toPlainText() == log s = ad.settings() assert s == settings @@ -765,7 +759,7 @@ def test_AdminDialog_environment_tab(): parent = QWidget() ad = mu.interface.dialogs.AdminDialog(parent) settings = {"envars": "A=b", "locale": ""} - ad.setup("log", settings, "cowsay", _python_mode(), None, environment=ENVIRONMENT) + ad.setup("log", settings, "cowsay", _python_mode(), environment=ENVIRONMENT) titles = [ad.tabs.tabText(i) for i in range(ad.tabs.count())] assert titles == ["Current Log", "Environment", "Select Language"] assert ad.environment_tab.fields["path"].text() == ENVIRONMENT["path"] @@ -1134,7 +1128,6 @@ def test_AdminDialog_plugins_tab(): {"envars": "", "locale": ""}, "", _python_mode(), - None, plugins=PLUGINS, open_directory=opener, ) @@ -1149,7 +1142,7 @@ def test_AdminDialog_focus_plugins(): mode.uses_user_environment = False parent = QWidget() ad = mu.interface.dialogs.AdminDialog(parent) - ad.setup("log", {"locale": ""}, "", mode, None, focus="plugins", plugins=PLUGINS) + ad.setup("log", {"locale": ""}, "", mode, focus="plugins", plugins=PLUGINS) assert ad.tabs.currentWidget() is ad.plugins_tab assert "plugins" in ad.settings() @@ -1426,7 +1419,7 @@ def test_AdminDialog_reports_the_chosen_environment(): ad = mu.interface.dialogs.AdminDialog(parent) settings = {"envars": "", "locale": ""} environment = dict(ENVIRONMENT, environments=[DEFAULT_ENV, PROJECT_ENV]) - ad.setup("log", settings, "", _python_mode(), None, environment=environment) + ad.setup("log", settings, "", _python_mode(), environment=environment) section = ad.environment_tab.environments_section assert "environment" not in ad.settings() section.tree.setCurrentItem(section.tree.topLevelItem(1)) @@ -1445,7 +1438,6 @@ def test_EnvironmentsWidget_expanding_makes_room(): {"envars": "", "locale": ""}, "", _python_mode(), - None, environment=environment, ) ad.resize(760, 300) diff --git a/tests/interface/test_editor.py b/tests/interface/test_editor.py index 7b8a919cb..d5dd14e4e 100644 --- a/tests/interface/test_editor.py +++ b/tests/interface/test_editor.py @@ -503,30 +503,6 @@ def test_EditorPane_show_annotations_real_scintilla(): ) -def test_EditorPane_find_next_match(): - """ - Ensures that the expected arg values are passed through to QsciScintilla - for highlighting matched text. - """ - ep = mu.interface.editor.EditorPane(None, "baz") - ep.findFirst = mock.MagicMock(return_value=True) - assert ep.find_next_match( - "foo", from_line=10, from_col=5, case_sensitive=True, wrap_around=False - ) - ep.findFirst.assert_called_once_with( - "foo", - False, - True, - True, - False, - forward=True, - line=10, - index=5, - show=False, - posix=False, - ) - - def _ranges_in_text(text, search_for): """Find any instances of `search_for` inside text and return the equivalent Scintilla Ranges of (line_start, column_start, line_end, column_end). diff --git a/tests/interface/test_main.py b/tests/interface/test_main.py index 2a2099c45..45e649537 100644 --- a/tests/interface/test_main.py +++ b/tests/interface/test_main.py @@ -1438,14 +1438,13 @@ def test_Window_show_admin(): mock_admin_display.return_value = mock_admin_box with mock.patch("mu.interface.main.AdminDialog", mock_admin_display): w = mu.interface.main.Window() - result = w.show_admin("log", "envars", "packages", "mode", "devices") + result = w.show_admin("log", "envars", "packages", "mode") mock_admin_display.assert_called_once_with(w) mock_admin_box.setup.assert_called_once_with( "log", "envars", "packages", "mode", - "devices", environment=None, focus=None, plugins=None, @@ -1466,7 +1465,6 @@ def test_Window_show_admin_focus(): "s", "p", "mode", - "devices", environment={"a": 1}, focus="environment", plugins={"plugins": []}, @@ -1476,7 +1474,6 @@ def test_Window_show_admin_focus(): "s", "p", "mode", - "devices", environment={"a": 1}, focus="environment", plugins={"plugins": []}, @@ -1495,14 +1492,13 @@ def test_Window_show_admin_cancelled(): mock_admin_display.return_value = mock_admin_box with mock.patch("mu.interface.main.AdminDialog", mock_admin_display): w = mu.interface.main.Window() - result = w.show_admin("log", "envars", "packages", "mode", "devices") + result = w.show_admin("log", "envars", "packages", "mode") mock_admin_display.assert_called_once_with(w) mock_admin_box.setup.assert_called_once_with( "log", "envars", "packages", "mode", - "devices", environment=None, focus=None, plugins=None, diff --git a/tests/modes/test_base.py b/tests/modes/test_base.py index 4f4f18aa8..c449addde 100644 --- a/tests/modes/test_base.py +++ b/tests/modes/test_base.py @@ -893,50 +893,3 @@ def test_REPLConnection_send_interrupt(): mock_serial.write.assert_any_call(b"\x02") # CTRL-B mock_serial.write.assert_any_call(b"\x03") # CTRL-C - - -def test_REPLConnection_execute(): - """ - Ensure the first command is sent via serial to the connected device, and - further commands are scheduled for the future. - """ - mock_serial_class = mock.MagicMock() - with mock.patch("mu.modes.base.QSerialPort", mock_serial_class): - conn = REPLConnection("COM0") - conn.write = mock.MagicMock() - - # Mocks QTimer, so only first command will be sent - commands = [b"A", b"B"] - with mock.patch("mu.modes.base.QTimer") as mock_timer: - conn.execute(commands) - conn.write.assert_called_once_with(b"A") - assert mock_timer.singleShot.call_count == 1 - - -def test_REPLConnection_send_commands(): - """ - Ensure the list of commands is correctly encoded and bound by control - commands to put the board into and out of raw mode. - """ - mock_serial_class = mock.MagicMock() - with mock.patch("mu.modes.base.QSerialPort", mock_serial_class): - conn = REPLConnection("COM0") - conn.execute = mock.MagicMock() - commands = ["import os", "print(os.listdir())"] - conn.send_commands(commands) - - expected = [ - b"\x03", # Keyboard interrupt - b"\x03", # Keyboard interrupt - b"\x01", # Put the board into raw mode. - b"\x04", # Soft-reboot - b"\x03", # Keyboard interrupt - b"\x03", # Keyboard interrupt - b'print("\\n");', # Ensure a newline at the start of output. - b"import os\r", # The commands to run. - b"print(os.listdir())\r", - b"\r", # Ensure newline after commands. - b"\x04", # Evaluate the commands. - b"\x02", # Leave raw mode. - ] - conn.execute.assert_called_once_with(expected) diff --git a/tests/test_logic.py b/tests/test_logic.py index c030a22f4..d30393f15 100644 --- a/tests/test_logic.py +++ b/tests/test_logic.py @@ -2482,7 +2482,6 @@ def test_change_mode(): ed.change_mode("python") # Check the old mode is closed properly. old_mode.remove_repl.assert_called_once_with() - old_mode.remove_fs.assert_called_once_with() old_mode.remove_plotter.assert_called_once_with() # Check the new mode is set up correctly. assert ed.mode == "python" From 090e859d7e7e41b39330fa3956dbdd943b407619 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:31:28 -0500 Subject: [PATCH 12/18] Drop the unused nudatus and semver dependencies and the empty mu/contrib nudatus minified scripts for Mu's micro:bit flashing; semver was only named in a TODO. Neither is imported anywhere (core or plugins), but both were installed with every Nu, from PyPI and in the installers' Briefcase requires. mu/contrib has been empty since uflash, esptool and microfs went. Co-Authored-By: Claude Opus 5.5 --- make.py | 3 +-- mu/contrib/__init__.py | 0 mu/virtual_environment.py | 3 --- pyproject.toml | 6 ------ uv.lock | 22 ---------------------- 5 files changed, 1 insertion(+), 33 deletions(-) delete mode 100644 mu/contrib/__init__.py diff --git a/make.py b/make.py index 54737ad7d..07f0c9fa4 100644 --- a/make.py +++ b/make.py @@ -8,7 +8,7 @@ PYTEST = "pytest" RUFF = "ruff" -# Paths ruff lints and formats. Excludes (mu/contrib, the API stubs, docs) are +# Paths ruff lints and formats. Excludes (the API stubs, docs) are # configured in pyproject.toml's [tool.ruff]. RUFF_TARGETS = [ "make.py", @@ -26,7 +26,6 @@ EXCLUDE_PATTERNS = { "build/*", "docs/*", - "mu/contrib/*", "mu/modes/api/*", "utils/*", } diff --git a/mu/contrib/__init__.py b/mu/contrib/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/mu/virtual_environment.py b/mu/virtual_environment.py index bc93693fd..a1532548c 100644 --- a/mu/virtual_environment.py +++ b/mu/virtual_environment.py @@ -1691,9 +1691,6 @@ def install_baseline_packages(self): """ logger.info("Installing baseline packages.") logger.info("pip version: %s", compact(self.pip.version())) - # - # TODO: Add semver check to ensure filepath is safe - # zipped_wheels_filepath = os.path.join(wheels_dirpath, "%s.zip" % mu_version) logger.info("Expecting zipped wheels at %s", zipped_wheels_filepath) if not os.path.exists(zipped_wheels_filepath): diff --git a/pyproject.toml b/pyproject.toml index ace170749..6748f3d66 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -72,7 +72,6 @@ dependencies = [ "pyzmq", # Serial connections to MicroPython-family boards (MicroPythonMode). "pyserial~=3.5", - "nudatus>=0.0.3", # flake8 brings pycodestyle + pyflakes, which are runtime dependencies # (the in-editor code checker in mu/logic.py uses their APIs directly). "flake8>=3.8.3", @@ -83,7 +82,6 @@ dependencies = [ # is gone; click now comes in transitively via black. "black>=24", "platformdirs>=2.6", - "semver>=2.8.0", # Reads the learner-env requirements plugins declare (mu/wheels). "packaging>=22", # `uv` creates and manages the user's virtual environment (Phase 4a, see @@ -249,11 +247,9 @@ requires = [ "tornado>=6.5.9", "pyzmq", "pyserial~=3.5", - "nudatus>=0.0.3", "flake8>=3.8.3", "black>=24", "platformdirs>=2.6", - "semver>=2.8.0", "uv>=0.5", "wheel", ] @@ -295,7 +291,6 @@ target-version = "py311" # `_` is gettext's translation function, injected as a builtin at runtime. builtins = ["_"] extend-exclude = [ - "mu/contrib", # vendored third-party code (now empty) "mu/modes/api", # generated API stubs "plugins/*/nu_*/api", # plugins' generated API stubs "docs", @@ -326,7 +321,6 @@ pythonpath = [ [tool.coverage.run] omit = [ - "mu/contrib/*", "mu/mu_debug.py", "mu/__main__.py", "mu/wheels/*", diff --git a/uv.lock b/uv.lock index 46218800a..708498b02 100644 --- a/uv.lock +++ b/uv.lock @@ -1327,7 +1327,6 @@ dependencies = [ { name = "jupyter-client" }, { name = "nu-circuitpython" }, { name = "nu-pygamezero" }, - { name = "nudatus" }, { name = "packaging" }, { name = "platformdirs" }, { name = "pyqt6" }, @@ -1336,7 +1335,6 @@ dependencies = [ { name = "pyserial" }, { name = "pyzmq" }, { name = "qtconsole" }, - { name = "semver" }, { name = "tornado" }, { name = "uv" }, { name = "wheel" }, @@ -1438,7 +1436,6 @@ requires-dist = [ { name = "nu-circuitpython", editable = "plugins/circuitpython" }, { name = "nu-microbit", marker = "extra == 'microbit'", editable = "plugins/microbit" }, { name = "nu-pygamezero", editable = "plugins/pygamezero" }, - { name = "nudatus", specifier = ">=0.0.3" }, { name = "packaging", specifier = ">=22" }, { name = "platformdirs", specifier = ">=2.6" }, { name = "pyqt6", specifier = ">=6.6" }, @@ -1467,7 +1464,6 @@ requires-dist = [ { name = "ruff", marker = "extra == 'all'", specifier = ">=0.6" }, { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.6" }, { name = "ruff", marker = "extra == 'lint'", specifier = ">=0.6" }, - { name = "semver", specifier = ">=2.8.0" }, { name = "tornado", specifier = ">=6.5.9" }, { name = "twine", marker = "extra == 'all'", specifier = ">=7" }, { name = "twine", marker = "extra == 'dev'", specifier = ">=7" }, @@ -1517,15 +1513,6 @@ requires-dist = [ ] provides-extras = ["learner-env"] -[[package]] -name = "nudatus" -version = "0.0.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/23/4d/cf8a2c68ef1f6653e3fb677e35e2fb3c549092853780a0cf6014beb83ec9/nudatus-0.0.5.tar.gz", hash = "sha256:ba84a8e022cb4af0f995176383f5ff9fa83d57ded3cedc6aa4db1687f88cacec", size = 4810, upload-time = "2021-02-03T00:42:54.947Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/30/014b1a127a66c93a7fbf18992aff1fd3478fd6385a68c4055e67b8c2b8b0/nudatus-0.0.5-py3-none-any.whl", hash = "sha256:00284890d3b09aa90297eadcf9142504e13efc6e0ac5e5e8e8eb1947545296d1", size = 5300, upload-time = "2021-02-03T00:42:53.39Z" }, -] - [[package]] name = "numpy" version = "2.4.6" @@ -2423,15 +2410,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, ] -[[package]] -name = "semver" -version = "3.0.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/d1/d3159231aec234a59dd7d601e9dd9fe96f3afff15efd33c1070019b26132/semver-3.0.4.tar.gz", hash = "sha256:afc7d8c584a5ed0a11033af086e8af226a9c0b206f313e0301f8dd7b6b589602", size = 269730, upload-time = "2025-01-24T13:19:27.617Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl", hash = "sha256:9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746", size = 17912, upload-time = "2025-01-24T13:19:24.949Z" }, -] - [[package]] name = "setuptools" version = "84.1.0" From f4097d365ee2ae29ad5df82b62cf56a16ca5d736 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:34:37 -0500 Subject: [PATCH 13/18] Remove image files nothing loads - css.png/.svg: the removed Web mode's CSS button. - 35 PNGs whose same-named SVG always wins (load_icon prefers the SVG), about 380 KB shipped in every install. checked.png stays: the themes' stylesheets name it. docs/copyright.md: the Python logo is now just python.svg, and a note on Nu's own artwork (the icon, and the splash screens and Mode button drawn from it). Co-Authored-By: Claude Opus 5.5 --- docs/copyright.md | 6 +- mu/resources/images/check-bad.png | Bin 17177 -> 0 bytes mu/resources/images/check-good.png | Bin 18845 -> 0 bytes mu/resources/images/check.png | Bin 7292 -> 0 bytes mu/resources/images/css.png | Bin 8949 -> 0 bytes mu/resources/images/css.svg | 123 ------------------ mu/resources/images/debug.png | Bin 8882 -> 0 bytes .../images/dropdown-arrow-contrast.png | Bin 149 -> 0 bytes mu/resources/images/dropdown-arrow-night.png | Bin 349 -> 0 bytes mu/resources/images/dropdown-arrow.png | Bin 1523 -> 0 bytes mu/resources/images/help.png | Bin 8052 -> 0 bytes mu/resources/images/load.png | Bin 6910 -> 0 bytes mu/resources/images/logs.png | Bin 702 -> 0 bytes mu/resources/images/new.png | Bin 6385 -> 0 bytes mu/resources/images/plotter.png | Bin 6090 -> 0 bytes mu/resources/images/python.png | Bin 4646 -> 0 bytes mu/resources/images/quit.png | Bin 8358 -> 0 bytes mu/resources/images/repl.png | Bin 7162 -> 0 bytes mu/resources/images/run.png | Bin 8074 -> 0 bytes mu/resources/images/save.png | Bin 7046 -> 0 bytes mu/resources/images/scroll-down.png | Bin 478 -> 0 bytes mu/resources/images/scroll-left.png | Bin 480 -> 0 bytes mu/resources/images/scroll-right.png | Bin 462 -> 0 bytes mu/resources/images/scroll-up.png | Bin 468 -> 0 bytes mu/resources/images/step-in.png | Bin 6552 -> 0 bytes mu/resources/images/step-out.png | Bin 6523 -> 0 bytes mu/resources/images/step-over.png | Bin 6565 -> 0 bytes mu/resources/images/stop.png | Bin 8492 -> 0 bytes mu/resources/images/theme.png | Bin 9653 -> 0 bytes mu/resources/images/theme_contrast.png | Bin 7959 -> 0 bytes mu/resources/images/theme_day.png | Bin 9953 -> 0 bytes mu/resources/images/tidy.png | Bin 6375 -> 0 bytes mu/resources/images/zoom-in.png | Bin 8589 -> 0 bytes mu/resources/images/zoom-out.png | Bin 8425 -> 0 bytes tests/test_resources.py | 2 +- 35 files changed, 6 insertions(+), 125 deletions(-) delete mode 100644 mu/resources/images/check-bad.png delete mode 100644 mu/resources/images/check-good.png delete mode 100644 mu/resources/images/check.png delete mode 100644 mu/resources/images/css.png delete mode 100644 mu/resources/images/css.svg delete mode 100644 mu/resources/images/debug.png delete mode 100644 mu/resources/images/dropdown-arrow-contrast.png delete mode 100644 mu/resources/images/dropdown-arrow-night.png delete mode 100644 mu/resources/images/dropdown-arrow.png delete mode 100644 mu/resources/images/help.png delete mode 100644 mu/resources/images/load.png delete mode 100644 mu/resources/images/logs.png delete mode 100644 mu/resources/images/new.png delete mode 100644 mu/resources/images/plotter.png delete mode 100644 mu/resources/images/python.png delete mode 100644 mu/resources/images/quit.png delete mode 100644 mu/resources/images/repl.png delete mode 100644 mu/resources/images/run.png delete mode 100644 mu/resources/images/save.png delete mode 100644 mu/resources/images/scroll-down.png delete mode 100644 mu/resources/images/scroll-left.png delete mode 100644 mu/resources/images/scroll-right.png delete mode 100644 mu/resources/images/scroll-up.png delete mode 100644 mu/resources/images/step-in.png delete mode 100644 mu/resources/images/step-out.png delete mode 100644 mu/resources/images/step-over.png delete mode 100644 mu/resources/images/stop.png delete mode 100644 mu/resources/images/theme.png delete mode 100644 mu/resources/images/theme_contrast.png delete mode 100644 mu/resources/images/theme_day.png delete mode 100644 mu/resources/images/tidy.png delete mode 100644 mu/resources/images/zoom-in.png delete mode 100644 mu/resources/images/zoom-out.png diff --git a/docs/copyright.md b/docs/copyright.md index edcd23cac..bcab4d597 100644 --- a/docs/copyright.md +++ b/docs/copyright.md @@ -108,7 +108,11 @@ status, with these notes: behind as unused files in `mu/resources/images`; the micro:bit plugin moved them in (the Flash icon renamed from `flash`), byte-for-byte identical to upstream Mu's, so they carry Mu's copyright and licence, nothing new. -* **The Python logo** (`python.png`, `python.svg`): see python.png above. +* **The Python logo** (`python.svg`): see python.png above. +* **Nu's own artwork.** The app icon (`icon.png`, and `package/icons` for the + installers) is Nu's, not Mu's. The splash screens (`splash_screen.png`, + `splash_fail.png`) and the Mode button (`modes.png`) are drawn from it by + `utils/make_artwork.py`, replacing Mu's logo artwork. ## Mu's design archive diff --git a/mu/resources/images/check-bad.png b/mu/resources/images/check-bad.png deleted file mode 100644 index 33a9c7afabd4d7b7cee41d02b4ca19699b54972b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17177 zcmV)tK$pLXP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3>vk{mgbrT^m;eFW^waj+;v<_2^8{vO;(CUfbm z9vQNd5#ix(20&Hc0;rX<|NDQg`!D|V+N;Z@^*U-6u1zQ6c!!K6D!zB%7PelL{b z=k@UY*^T%ea{a?}zW=56F7fltfBrc)7UL9NOwmP4A^G=j{M;!qiZs&XYvbRTLewjf z?-Q@--}cw_b3d2vZx-<9cYj(xzrU}iU(4~i(2r@=KdsaE^-%tP{oX45aYP~hymS2H zh)#|Ew?BVazk5%=*FLkGnLHY~ekb)~D(^eqxLD5gK34hL_^Dfk?iZA-zv0H_h|fu#m~0}Kcsc$Y zOL+Gkx*s>|-1!9F83Pwn6o32c{`|uK>)+olbg$Ap1mAzI72}FpafYGD>0jPOK*Ig5 zX?g1#+~t_bv=3BqHEz zNF~(ZTZ}CP*0B?x$;e~MaS?$~T#1KK#+*_mI6dm#e5Qr>-dN)2W#ENClvF93t^y)h zIhS0iw@wO8S5nEPlv-NpWt3S{&9&58TNO^tmRfG5)z(^Xqs^Xr?gc1oz4y`Qh$8`G z#f>`J=wpmIx#`T4Yfauid11wsR$gV*)mC3)%}x63yvwe;?Y_sJC!TbG0C(zXr=M}A z1tXO#Td``*x(%C`T)XM!TW-DW_B-zU8MSXze~;RqBlkZ?EqtREU!e59_A6?<+}e*z z1i?vB%!pXbfrvLnfP{{UneQRzsK_a1e#GQbDv?nZ1?L1sj0k26vE1-8cE2L`k8yLX z?*BG!@$Vw%6uSQ(k#h>&A0qeHxcyDk&U|p2UVv1EtSJbYC_mm{ea1e;OMm@3PT2LP zJO^vs_l;@!!h!@~DPKa>z$3n#8P^GGC$8CA*{52}YaABx+8(RcvjH*Y1S9V>YfVfS zuskglTX*KWU9tXg-o&(&_?0*D1r*beYJ0L;_**`MyfvbI{EcVr`C zw#p`E-mI+B*IsQ~>N{w1^DaJgM~#PI0VvxO;p^+-maY)%5>X*{5jMb?iL{-~8dC{( z1Dk$YC-{^|g>FG{^1`g#g`p?%dzLbDs3qin);TIH z3a+Lw=1Rgw#xuC&4I6#m;#BEMOqs)=CdqiHH2Rvod!y_QLIh%N$}%AOrdYjJXTI-eO8&> z^+6Tf(Kl09#teACkT!?Z&Xr85K{*K!0}5lHB;HR;Rk$z|8nUPU9L&viMkG*h&1suy zUuv8zK;!{Oc25Dji{CMlmx)T8dzWrhWNbiwEFv>^jD%XF?pL>sW#mmcHt4Amr&SvS z!eZH;HygLNLi!NOey3-0t0`;pc43esgZCV8DQy0i*HW;kfq~Cm_n92_`z^QoDjh3jZRnz%kEnnIG!+OwmG{Wkf?XtqIT%ifPwU+JZlcVrMo0 zzpG_k^jK`SrZd{z0JAQ}i1`=^R47A0lKBCtmYB5hiv<`3Y4%$5?zGA5dv2~XRp!bs zfX#W8aexr1S1#bbPAV5?G=VJufN=nD9-^S~fC%`YK-oxuHThrc;EypNz=t>hasUXZ zz&-0l^>s!w=K-QXD%PAkPZ7|auU42^q!2doA-NEhV>RSQ&UYlg(47X6lcoffi`4+n zw|#C;Y0kmL;st?`HW#R!1VQ+S6JR8ODX}?qgNNj`UV<0;K!6zNP1aOk4#YrwK;*<^ zgF~abp%Uy>Y5_AuwoZ^Ir#|l96^H{w77`fR_1@4yKBW!TP%a24;REDz{V=z@R&VAN z?pVv`-Vs<)^GzcxL=T_GTlP0a1I;0YiISlVfT@YLm`4QS${3j-gw@F}6nTR2y@+vv z&lG8a-YSthr8R@Wpw^xd=PVcXpJ1f5NT7ksjug|~lpMGRSY*a?5CM2CAdr}sfgb^u zcA|_GJ5&WyLLAmeX;KFPXbzSi!wOeMWbOS?MJxOxx@}SyZG>DHkj4`t{bm`6)RY<0QVKb05D8Zi&F(nX@OaT6$>rG$}gkA;tTzvH(c#YP>w-dAl!Jqa>H;N z3`bof_ZpNZyI9Q5_E}O^AQUnP8vAB=$P(`om~e$=$nXGN1CEFHvOXnPm%3(3sFRui zzZ>8^75qXJ1KYqf@n%5=bkspkj~+zY7_YDZYlE6-4=&0?NqXLlZY4fhOquey$0B^{ z6A&U4LaMrsSS8sAsxFC~ErCx33Xe*o(t);B-(ZWMvg)MIlsE!|d)*N3PPr+wkzf=e z=n!zp&-cCmx36J3>x)s67hZbs07_<^tQt?Tl!H`f-c6p}H}XFLEr5kR zvj4!dPfIOU_W2s zVB*$O8%qF$EfnemNkj>kMUWdR5(da98G=&CG%N&qI&CB(>L-w}ZKAIYmPeg3m@zI` zCRs&cRz?FCiK!v7bq~}$NP0LJn?+H2*j#48plPUG!WEq5-3WFn2*Wl2yq-vXrWrdX zX?^3#EM6^Icb3|aRG5#T(TM;viH|Br(33QvyhjoGeLol$059W`hDQEC*p@m@4yT#q zMI+eivp}NZQ0EZb^p*oCfP_m%;@S*Y;#c z@`w*$J&oN*+Ksv-YEJPBpV#G<(hl^5s`AHbhd&kFLzL#q!CL2vV6;s><<*a+rg-Q)t~M zM2^1d?v?CTAq8#hEyIxjof*<97?55JKE&rx$+8bH8hS=aF;355QafJyU^y~ZWeGpS zty#PV$Z-uw`KwyV%*`hmPW*^g6k6I9;u_k_5KLw-7y*Z}H_?<}Ndtz8wWWxrM+HOW zB*z&8pNC5Fi@AdP7>az(O(+QXp2d#ZfXOXU<#1*azAh{PgHE_RvWF{3mx1DjoSa1Y zXd{4%B8BG-dCK6Dki;_sztBM|KalMzi_n@VFcgfEA6X)02O?`lt1W!a#bjdjAho=+ zgJ(!8YOHHBfd6iRP7`T{sLHTvFnq}NM_dQ`lAb8zjGx@yBetUM&r&(B9RbRcQNR{Q zvAtOXffu=2MbT;N0kwy0<|g3aAa8DMSOfkR#QFgw96VIf)dl?oag{2m2NqKLzy-i5 ziNS+KyYVNFFb8!i+jn%S(C5#)IMq9hD|m0w&h@!WRtrLtgy-CJbMl z|CcxX`np0xVQOFKVBVgDhS0=T2NXy8d8IXV(xLRx2oM@ksstB(2P80&BM7#w1O)4! z=6strJ(1s%j0B;$y}%CiMv~@4h?sU}pa_x(oq$0{w30k+p*q{k0~9ZL(8vQ+&>;_a z`#x@?ZqOOqLuKRvJcR)Il?OSzJRo4?0qM65b`t$A$gWxdgC$y5b;oNEnU2$hw{zT>%|1)K=kiQLnthPsFvSQn9fBO8VeRWF-b05+*7#09>4 zK{CPbrjrCl4Bf+gMMnD$plsqHAf`&~qB=>A(1f&@4as8=f)AV*{9sTeRCN5^50!C$ z7%iE37CEBC=H~s%+gk`293ckF#3H+dSBQ#YA&OK}@GpoE)`7S`L40P@f5PZ*de#m1 zxU?Hn>(U7iY6PC}z!mSJ0-CY(83JHNtj0(Z-bvelAs@IObVBt~fDl~0WH0L@2Ts(c z_8mb%R50o$L=*%zl7%C}3(XU>5sL@!+Wrkk__8zEdbK}90#mDS_BEaAWn7HLbKyN&J%i6YE+VRgkUO!WL1H;o{60516;G85<+zei` z2B=>!x45Z=AALa8L|LbLV3G0&&JvCILyhZr8KyVP8>~zoX{)$#`8Fk4seeWUlt#&a zSd?!Wjz#56#9ANp(PC0*k-r9$2GU3;5D`!u7examx2ai!+`CG z=pZC+Q}gI><_t7I9oj_>Fo3ekkB=p97n`H0933sdLG9UpkU_u4jPG{cecQ@ieF&7d zj)n@N2O-hOx-r0M&?a?i3rLe=VvdYchm;JOIyu?28|^&nOdXtfHi3SOwRmP7{qAsy@F9y8l*bSYi!L7?C#-ml8imc$QGOsg9h zfe)!zR#2A4Qvy`&7#b&b5+3s`59E;QrphpH1GH;zZ!{Zt)e!gzIuciq;nXz)ELX#% zx{^|x8!$wqZ!KmT4pAIxbKnN7JeuhAQNkYyl?v(7K5Mkq|J0Jw1E@=%&M%og1cRi zK5MkQ@1r)37RY$TO9z5}1S~|M{HFlNYwLg|ecR&r(Y!9nhpLAmnJk6fP%z>`rmaOy zEqN%A@G@mQZ4<>(rU)pjA7rIo?!13ZJdzQSb7te6Ds$~A!Geil8&OM`#jImRG8kQs zGT^;OwwQuPXbq~4#7xjx!F<5rK)T!+K!S)-q9MW@!XLp0mUZeALOFtOv=uW5+AM&j zb?|XQ|7^BWKtFd~UlrU>6*!E+rwriul%$gjZ+*n`Ee#-u(zu_}DD7JsM~5FnB)&5O zbh@e52&uv%Zy3{&HUtba3|sQse+5sFrkJOuJl>Q74!iL_dEk!-`)vC#7NOh^y;nax ztyYB5zC4X^UDH3FMm9?CtqH9_<04**ceybzE#x1-cEEs|4cNchS)0IL%Ux;?z7A(> zojZ&l@@;M6AwScfd~<^2qn&51;P3LSG#K>`PkJi1$f!y-0TB?_E2iOl(YcB?ov`ct z26OkHe?*@k^7wY?YJ~pMhLIz()|6*WTgNDWtmmixQC0)>MhMk$V8DKPWpXsuA`)-9 z8-^Zj*d4rG(1HO_q^4%aOuZs`$62Z39m2fVNUyat(l2!32T?MML{?j4_u>qXn6*!c8BWl6>b5|%qr|7}3yR&Wwj z#rQy?(=NtUOx35N(~qEahczTYBOk`80>bw>RRJDu!blAkJW5Mvh>2S_#3**D=wJ(w zPPi+Ow5bzFEgqkgy9nY@|D^)mZ}oKkSWh+vjs*iFIG{6P z&e4IUpx6lL#G7{0!~n#1m=A910CASce~^zjqDY=oX5G?9(RQTlxN1O=3VAYK<(R{| zI#c9wObDwh(>Yhcuhsmstn1&Dwfjq5uXi+yNW_&QQ#%j z0n~KjSAv!_9~Y6s6eOU5YR}~$`*3g-1^Pybwv745fGet>x((VD?ZhR3!D?R6&yIB? zir7j7?I9--_EzwqpA8*?O%js*S9YeLk_aPY+fmt7{dLTc5t$5%e__H zk-uUHTprxo-&QjST5J!Dj#@1oYQV$)+dv8<2;iHHH%w`2X@GVE>#YX8OaiLUCSqr{ z29Kjxe`8jsSjE#G9iy@Ki|WM$PVgB-o;sTFn6^v)39Ru1d?fe0*E6Q*R3>6qd)U0m zZ4+1lyDB(!>aYYr*_G^XbJ#Z1PAFnsUYMfBl%Yg>)qd^No)o!(DsgHZ#Es_I)K5iZ z&~t}6Q&S>goQW&+06n8|xK=hX4i>EG#0Ob@0qK0|agyDvWB@YcKTDM7EN@d=q6M?C zer#&@f8NvvYA>b}?JMVmg65|9FDBx*@(bX#bG6rumB7Gy$|T{}3vfDgh@}Gqa+LCL zr<|gVyj&0%q-Lq=c!ANd)Ko9Vl%N6?I@Clp;q;UGZdkppUJ!0WQG-zKwWOtuUaRl8 z1NY1HvbF(>8YpT>>fX@ltwi=x9bmhQwhWUOIbh>c&rT-4g(0fTsb3^P1zW)nQiy36 zb;6aXwqxm6Ki>&HfaH7R`dd9#EVI{$C=&cQ#-nm&RDxP}gUf`<8Zu@j&EBv5^}6X>c%=X{V@jk;XvOMu-XS zID&J|4{6^SqfvBI4RgKletF)$5G$r56ju6;{6NaZJzt)BH%3aVBi>!ll@*8{-I|H@@jz+w6 zN(7~Ub<`)?fg-F$d(AD&tCg{VtFYUC2Uz$mDBzN~pdI)O&>;muh5tj%4Y-gzYT3`)tenU)D5 z75V)lD`#4$0SeNA0?2UfOK2Z;E$vU;gSp)ay+Jl$)S7xK25Le#K`8XaxZBoIE*b)# z1{gYwbiq_sQKZPcK=(j2xEFy^oy!`Mt4MgMH&F-uUAuKhM|z~3_NnAf-S?RLFOC|t z>O1HlNnLg(&rVz=F~Ojm$i@{(&T$z*_iee029nU*vUgqk^UQ$(Bajfj)$%5ZfGhQO zKcqCESKFcR!{IjCCy!W2XG|3+!VV_&t5A42d+iFql%2}zSG}}g)V$EJ(GE9GI0*1~6w=1q04?hB=N^0p z*wFS@Txu%Zul#kO&83nWoNi#DEKH~UP4pGQ8KgZ`yW6N{AP^#i=_&Fp0~m^)S|W^U z%s8!rhi!dZK`sk&9O?UdL5A8-x*7}i>%#bT>L2TmUe$LFH&*_f`l}_74eec`M2#AShKd}qaajiFIG0Dsdh(XFNyqi zNuo}GS#hW;I4JC>D|rkiztw-}3AxUMw;m}_+ZZ|@*vZ-%)OlM7z&=!n7?4tEc(IIy z(7D`DN1_r6riqyu|L@~JxYfgF|=$dKDJ zmFl1}pkh_ICn-wu1CUe?&O7j?>UHt7)Y=v*g*R-tplybPRNqmW3Wy^KpjMR1!O{co zpH{ItadF5Byt;fBZn?rH=Mz30hwFc8GYo2g1*5O97jKI3!zR zSpD2YiQBrF3BB~@Wm0-RZKL&5kg__jZ{wgAS3^faewdG3DZ9+e>hhncdhMq}^$z`8 zVd|kif3aRtBNnbNzkT>5F9uL*pCvE|(5W<=uTNgdL=D<_M&H4{NHnNaJ(!#FP`lo1 z5lBUcxmC9E61(u+XHy!Cil;{fBO2cUXM&I3vspOmkM&XuGhevG(Jt(kYgE72ZaN=o ze0?36z*~W^r-<>j3?e|>)uR!lcb@7PoKc7JC)d}qh=|s)1*=NX8fH|_jqDM%_*dOR z3!(^WDglphCs3=NPf#Q6l;`Hwkd{2FSIz*HNrJS1)h3y<@kK4^cmTLjPm0cTUH76M zb!kjNiIk9Mq-r5Y90E3a41f^BqbV=!DP^66?TXk%jkiSEPCez*KOKFj0e=v&XXpf0 zcT`KKI>so5*U$-~t3f(N)B>0k)t`%TfN`jDXGa^UK4dUZXZZt?V>M8v7*MJZD*QBo zm49vmdyNA>y7hkR>pIq025mQ~Aw%65Q(Z!O@`oUGEi^OuwC?)xdK>Yy>YdCM7w+dh zBA~6Q4us+fFeut8HN(Mx?N#kx>N)P{BvMhTtKc*%y3S?oQ+sqeenGCS=<%sowV}W= z6BX85M{OB$gydL`UQ^2&i@G$K`FzI(E=cheJypWLYWG8jGI|}47P4d_5cCWYpXwDe zgzC>&QXP^)=fZaKlZCkMb^Hx&S68$Rtn0NiZZAPPE+FeP3>Gx(91KL7gP%yTp~pmU z?uFNhcSo^NwDCP9U`p?%u1U&%@Gxjj8NW3Y zU}mUgS&s=U`5>Js>mUxGK>uPp7WxZ*X5@N`D9DqS0H{3K?(8D1dk`3F75SVVXnLgvtW}hL32Wq*pOiOdzO*4A?vSc`)1-z_PApSi>q=y2eN~1Y6 z;A~S09mN{enp;1&N^g%ht6K1)I}8N0dYvch$r*$QIrW~iay7p*-H+!%>OVt; zf}n^Q{6rxtIo>h&{5)flBX9nLs(~fYHBS2$)Qx|KB6#a0lOSqUf6eL=Qi7z7q_Hui>D4_WA-$6w{+EH)hdAL`QqQctV%} z+ankt{EeNts^~Akysknx!VOT++Aujf=>IJRYJ1{Nv+^nxo^mq=dG@p8-B-47vY6AJmZSiK>7 zL~3KfwAfQ(k?SIvC#)3J$~K{mjueK$+BmN3#IJ(2_8MU^#Yv44J%JkKx%F zI=LM(=b2Qa?6=|$=`KB~=hWo|zW`-ZXLHCkJyqGV9^Mh>M|BNoZ}A3v-{(m~l&Si_ zh8{H3#;khU-Fwn7;imbtp5I9VH`W+s3>wuXvIhXs&>nwW!UBX^M>}u<5Lm5PpkCOH zVIbl%1Hl_>D@{+P!im`br00xaiqUm!g9dEsFUFX>ZYm1HV$^0UQ}MWL7#{;or1aME zo_Q&r8F};*X$x5xKT4_{%o{OBkS-DzSUuC!A@m+5b)<+L5#M{76l5WD>-TBWc4Q0R z!=yU1hh@?x(<|0GS7aIRKlO+io+zRG_0ZBITRm1|_(X2g@ZM2v6M{%85KvYB9|k*IOwMw8hD!1Xp^=36X}m^=1w?Z@cRwkLgXB zJE#ccO8Y#Fu&@i^^Dx5Dvzv$-X{MhKQ%df;Kk5E^8Ik*Me{)h6dEn`R0004mX+uL$ zNkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ>CJn4ptCx2vVIah>AFB6^c+H)C#RSm|Xe= zO&XFE7e~Rh;NZt%)xpJCR|i)?5c~jfadlF3krMxx7Fxu3aNLh~_a1le0HIc5n$x%5XT~xAVGwJ3W_MfMwC{a6bnh(k9qh9UB5&w zg4YKP8|AXJ%TDi%IMp7^abiO#w#|RME1?pAD`95}>`U&8F2Cnp$zgz=m zK1r{(w8#+<+6FGJTbi;5TgFjOHnO-Q(R|?Y;ebrrF;QLy&TmwR!-%00006VoOIv0HpvO04)%u$Ik!&010qN zS#tmY3ljhU3ljkVnw%H_000McNliru;|CQB9xMGzkxu{s98O6@K~#9!?VWdgT*bNf zzvpaUZBg%Xk&F#Cm=a1T;U!#pFwNjl5(to(1Old)0J(1()utE{0wIvV`@#)15EF6@ zNigAJ4564}V;jr1s?}E7B5mKfe;i?BT+p0dNoQB*_xb3vlsz+Z&V2WodFDLxjDo41 zDm2g|)Kn*GvI`|S{F&}YNe5BVp)H@=NF+hAZTp`rK7_@;_0w8H##)WA)sV4Ok+Ig` zD=t^eC%$8u4`x{5z1$dE>QKM~fUcTuAsV~Ku*n(8)O8#C4_(yqNoyJnFt+8poi{WVU7M9 z>)_j123HJQ$^25rR!h3*AW}sKl5+2d&p$Dy2nBtU;b51rhW~{%{2JEiyO2o~&dsTI zQm(I&@*Y9TdpKTyrD8&wS3~)S!Zxr3TX-o-I$ZFUMp%3#eaDdW&%sl^r(!~C)ZsiB z5VpuNYy&T1iGDa?os6_=Z<56)k@Osn&tIyTkQ&4*w+}pzE%-7@dcbsrw^-K_lK$gJ z6rYB-v{5l39S=DBHwk;-32XyPP(;k6a%ZrrE|UI}NR*z5w`7uHLOLdvvspO$9>W&; zo3?OnYJ@#)Bk4Pic-eV)OQ$L(q@yzD>=X8ZXR-G^j*=NNq0?52(yHbZ;gdg1K32W#Zb@oR+Y1m|S1*Mg%K z>~&x-2a6x9KCt?=?|flc-DVn+i9sp|sgU-W?1e--#5=Ul*e1xt$L;n~p2LY%UTSFP z%CHTKwmdEzy$_A;(5^b5XfN>Y2d)|5YSO?&9mPsB5O0U*dWf!t@VhYh(U`t?5UPiG z#e7^1=O`wmBT%Gojc{(hZEV&$6&2ijg6|;k9SB9UK(QNOEKb1S#}IlOLT|y)DiEU| z=#qBtL#+BbJf+hW6Vjc|J)aVe?!_pX=;&HY-=R=?6!;DXi`V!Q$aDyT%c1`j2)#L~ zR#vD*#H$wIs++5rkbZIQInXYgU5l`WmyKQ}p8cTW6!0Gb7I*%7Jn2Cgcnx}=hsXz` zH&^u@Nv!G$yv4Q3gokvn=Uw6K`040GC0UA~>_n)T3(m&EbJ3&C(EAMZy`;gL>)Eoc zmT2wI@Ko%lOjt-`8y^&ozTbmL=eA(iG^qM6lpbx2Ip$c*VFRx~*JGLkmQzCP#4G0G zoOHf2p&$(f`-QV-F}8shb6c=;3e?VrlA}i1BR8rt5LgPG4?(OYrzIzfPr)(mW@SP^ z8V+^|XUEU54z9>uq4rv+y$DK=*F5%#E|G@7OVIHUByu;6N);VKtoG(Hk6j(p%EEyS z!qt8QmiW5ddFoZ?LG^jsKb!iJVU5A&M_}{+)20Nu@Y@_Sh}PYLw{(h9aF9j=4AtF_xMo@fK~EHt!+Y5YCPZVUz87KBtyyi!NjvvosQzwz#TANSAq@rlg{%DrtV8eU zFT_>~O?PWybEd{tgCE0ZS3(v}ZmQ@&qP4f+^Oxj|t(?A|ar8Wp9iWbSnEtQ{=y<7U zPnhvgR%_4J!MAbrK9tjDyyGh@T~p<+|yzAN5MJCgk?PCoC3T50bJ8{7h&&z zifHSfgrOiE?0!c$yBBBY!B2k>tR*HSMv%1>X8cy$N~4$co_iSV`L{3xq~U>f;q3gG z{&&Of>9E_q`4J&Mk!10~w0ps|n@)E>fwSWmga}zI8zk*U}UPMKSZVZ>M-0e0o0U2@+E63^qKV zI~YZ`C3SW!)CZ_yho;-I0#sv3K~=Rsi@Nonv;H#y-LV|?+UsdOZ~rn0oL!5?cDRpi zdPG=aI^QTwzDe7;X)6EZJpd-(pwADBts>U)m>3gCBYmF=N8iKxW)@ZFny)(ZU1cXh z02vC9a2a4eL8X%S+rka-Nj}n7lP_9)3t`Gh&Ya(-;Ay$9qRb2unxW@ zS;KI`uf|(Jv6>xR2vTg&bcdF#O^3HX)cJ}S6-YzDUZLk#fUOE9->B<`Oc_|V3eCUJ z$9YxfnH(ne@4EcwLjYSG!9b}N2*)PZYU{x|1*SweL@;i zTVxqZS~4ul(Ez2#nVmI}Rd#|FD=cG8Q@z+CughCfnZ?$vbI~7wVlg{vB1^GB&4u!F z(_QekLr5b%D}^Qck-QZxGp(p8plptGys%|xC6V5b#E2oa1^+7Fu&T3|m?^+bZEsCg zsQk7LYx=j5S<+CjU)aKbmn+@kGhct2`jRz087v+-NW-s;3{q?KJ$Z+z{3Ok@Gi7Rv z;VRMsq@^6FJ_a|xCcYZd(5tfR4p4E1*(s*BSH)apcZ}_56yFBY&_Iu{M&6KXh=a5G@*jrmi=Hp?xD`^_*PumvYm4}%Onv3}U7}@? zmVq?-;f^5vSn}6#i23kMjT$eO=qKAk8V+m}YD#iG>OIhW@TMeqIY4e+n(QFl-y*g^ zYKg6qt59`n8JbO*8u9dS56Pt{v4u+w()fDG3imWq=9rRnwC&QT%BZo=wnC~Vnk6CK z%Y5jjy0tndDHNcwIJ~nj?uxaxEE!{x|A~6P|NrvJ{E?ctWbFdyf z^$JRTF3SCG_HL@?;8_jq-Bg9ul83t>98Ro3Tm{^=9no4wXu0c>B|K{{C(=%T{jUf~Oba0uCAe%cZ{k_^kvUhs&?I zo!c)u8mB#vR$3f&QjjW%4y=kSq-Oe@ZNOZyx}8_wZRWKPHt>UI@1hB48l(CTy7M|N zi6;2X6({1b<;hlZdyU+@G}VPwdOwrBcEW@C&Ziyx{k>-X@!kf$|Lh`m19lsy_WZ~F zH}gPa6_=m>_565%4mn7b)Bsi`9h9rYR$<6{k3AK$IvUA}H`|{mmwoRGd+8yE-k1gYf#W!yGZ+j2_8Bx#wYc*HSJJ|S;O7f$mgQ!Y6 zl(&$!_lCLpfu*_u{oDfI`|Jw-`<<3{rHUd@%i`{W&jhT_I=sH`Q;#8AmdcCzX)%>52T zVmT|TKO7yEa>r6FT|whFQZ_B9NT5m|Vk^1x&(zqiJQyER$%8&JNmK<%OPWWgiKvP~ zsn=!FYa~e;IfW!vL|U?v{8%(T?HhZr;PkIkZqe=%ai($yrj{7E3BIf62rl-eyve2YPFj!TKrQ zf>dazqLQ&zqI&%mN=9}EXmpK9KptpqYoDlxc5eExDp1;{ug_dO1+H3`TA z4aO1%gH+DAWgJuC^Km|HmrQ36dEX=;4`fjdwhSf7O?udP>a?V*^CB8*qN}o`$T*G3 z#C2HGFF=}h&eBogYLfzkYwsol#m^3XBIh)rkao`83aPhrvXZe&rgIFwWl~^p?J?Ov z(Q1;sWbBjhmP}H%K&n|&$rR(EH%$r*uKS;V+c=Gp2AvB>rx|D;J-}@46b7z_)j|fBIDbLz~3aj`X;<(P0DtV0;JrMr`&~BNN)!)HTHUU z?KlPnB?AzCM{agdv@M5Uf>iEkJwyryUNb2$xHbpI(UK1QQ#v5&%N%Y4X;IBL73m=8 z-si{d{%uw@hh=TetdW-|d+ch!8yv?SzP*2zvwPNZimDG+b_yv#%6phxBL+W)==i+L z-+fYf&dU1YnqpI3NkKvCAFr(>Lu;g8`XoKu^S3>up8q4?n7)_Bqma3VYy5xklAr4prYNNXH{Ql;9^1zskW2 zug|--x7_v{u0Q**v9EaZAEEs|sY?=N-@!5U3gs(@dw`_xgq`ubb9FzF7a8~T$m_Oq z_a(>i{!bR>Rl6TM^I9&Nv;WvvERxXuUy>K8Bz@o7$^Y4bJmoW$w0pK(9f|I7o12b> ztQM79e{d9UTybk&wD&hBU(Q{Z97~CJ9Gs@!7a%FOTQ%+87f;!AWyFwb*7RFCO#JT) zI?mK;QMu!XNAu$Me`@G<{{OSD^q8 zcn9=6OCihSvUBgH$Me{k*BY*EkDPHe!TWyCQ~!4!GaAaqrxD#xK|<~*(2T7XSKX;Q zonP*9;u+iYJK^a0tz08*<*?^-jin zgVvULnK`9md^72#Bk=KQkdoU<9k2W`&PnI%gESoM7Ddh9M*2Xq>T{v)G74RPd2B|zur|c5YuY^=9WFA75+|ZSYYrm=qpsVH`%s(#u zWzNbw@Q!PFf8FN%dl0P)kv$VkSiB@lPXFpD%~yTFTT-VaO6JKodf=ZBSX%IqS}iKK z%|9xqj?@D$ypvxKq3@;Pz-CD+T5=ZN;u1ry*3YeB;~hf^^|;F)8=ES#gRT5?A%HKe;7h3LQB52l> z3jXtZN93%$XO^wXj~j2fUD}%mh?kv*x425l8KeNt$rmWnNhAOQFKcfgCV-ATpozpo zkL9GSWh*yI2h5DQLhnGo{FE;3n2u}Gc_UsclZx(*m;XTD&9vP$VKVW3@3?*FT=-zt z<^1T+_poxkfrtEL0NU@@b!nnvzSQ@nAa&Oqqoj%smTy&h5Sp*ci!-2dq03MII!iD9 zdDi88yuqO7PGyqNdZ(7kQFaRJ`3COlZz`h(DL}01Dt%7W&>GnEvk3vIMOC=?lmoIZ z$8bq-HJ1lEeywf7Ob11WpAq8+vI#)@%X6w7j)`bw77xbe7 zizo}Pgx1@KEoerwsw188x%a`YwPYTK7}%mNhByii>qlyoX@@)mor*0c+-z3htYuKhVbI zuo~k=l6|o8r`lLBDZW!JkB;+pl9fzy#w5;L>vmQ_4RSS?lW@pRAZSdKGf_`f-Tjd@2O%F41x;2>JZ`8CyN^${%OljI1H`7S}1!y4w+YgPe!f!lxHNqN^Yw%_f1x z%qioT1UIo6)?5J5b-FGWY7x=8TSpW?GU|{5c*mHqVHM1MXDV=z1({O)m)LDQ+tojB#rBkV(w&kNg`%RLx8TI%IxQ; z02VLQUkc@?j#cvuN8L|C$3u_~XFnp?>WDTh!c)52sCUAc^>QSzb{NzgC5`YO1`St( zquzw?s}yU2);n?*A~}|Tjwz&?*S|ry+Hb@XUz4NO+oAGIsJRd2Son)9K2E~s`B&P-fOd9(RZExayQ z(^>BkM60gHS6nfs+>G0#F5bLoIOVy>U7_|$sJ;-&Pb!GDRe4V)p&d!n`Dl(qAQcj2 z=jwy0@JQbp;oN*1mgt9LaQ7;>_XOWT;5z`^vowgu-8+xL;3^2e zt*vbit&%=OR@ZOAy$`YK>+qCLHxw6!ePt7Ed0aSpA3_<0xz^5~h85hqYe6kVyMt>6 zIH!PO8AXpgrA5FGt%adaVQ{6E?PUzl#1g89c*T6(`{E}oqyXW*^}^Y657x+=)_LtyoT>IB8P?HX++0V1YZ#Z*w+)Rqcr0mX@S?WC4OJ483? z+T@nAxu@rFVwIQTEp0R`3wiPKdvNpX!r5~_YJ5GWax|lGOe0qLV~VQ2VR#1eCPE_= z>=X8ZXR-G^KDJYU0+UcZB+AYuQG6;se`#Lyf8K==g@awf*8gYhfhThR5}=^r^pYq& zi)6{Ec>R@m)$e&5>lW_cB6v&-Cgo*+=Y2qCIM^ku zp;xi@KaHAbHL3i3&S{@SqU3Z^zN7H^tMa;^3npqf6buMkWEr-B7sqCe)u2kd_9j_; z5=qbDc{AsnFpz#xk=_r5ZD0wu@KTf^)pM$4-&w}gIg5Q5J*!4fc zI=CEb_;u7|d*KY{wt7;&qeyuUrl?~7g6_u&wMl5O>kSRq$a2)gru+lbF@;po!K8`~ zp{VMR3Db8Ib|+h;?^9tJT!AI}36|(bs43$m^vzhSNW1nT?V3fp=pa00GbUtzncFQt zUnK~v7nbO1EQw~+_y*MYXQ;`|$R1vxPbwK(4H;(>8G9pX`&81dJ+jJ zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3;umL#c?rT?>vS^}d0%V9jHchJkP?_w51PA{wa zbVO#jySbSvAR>1VPHB&pf4_cjm3|*lh(GTfe;?5q z;rieI{I-7g?so6_%x+|JESG&J^Fsd1MiH1iz$kK`0M`s!vE{vKV0ZurFjUx{ah=?6_sBMLy^^~_V>i%AUCF0(N!GuHvyoFSP z1z%&VA+U~(_zXrKQ;w4egyKrvj56kwjNr7Wd-ItZ-g{$-pO=9b0#TAtHcbUYuyQWh zsJBK64Oddhr4%c*w9?D4WZ8?0)$DV+(;=1+P zTkm}gZaVVdT7&lwUYK#FnP-_c>uj^nu}GhlS6Q~|YOAlY<4zk0aNBm>ZTCG+IHc0a zryM)=wA0VHaVEra;-lu5dk6r_lZXh@4aCev8~+`+&zJzmu;D-Wv0QCeU|cN8F(Wn-OAn7OAp&uaU0M?Q~| zcUK7F0nh!utJJYqIdxC#q)wTw`)ubXE`V47h0g|lJAkk?5RcM>+hnTgbuo$+y!j< zaT>v=L=3tG#mNg_ODGvUudMyvE4sFd94K5&J8qPtNPwaV$(2O4=DaAFpW^;6-p&L!roaY-VL0 zlBOTe;&gc8j2(6yBU7Vm9pg97{5_#sI#g1eBpRBd z)@AA17^YH5ds8Z%OXdT7BAgM=LnzooXkb$!T?q={mSz~B4>$&qf&-4?f8YGeSCZg1 zrXE-y*v81KozE4V5~tp|5Ma#sJCUa@K%Po@rm1K}@UoEA31D1%_XsFOU~jdPg*hjH zGN;?MQkWSrmPl~mwJ_&x@h^dr7v3<(Utj{c?xz?$I z+uLI5%9suh9Hh-AwX=~a7L=0!F`&>pO5*)ARfQ8np&@(f&%xYWr$+(>*X+8O_NB(j z0z@8gbnY%-ckwGm@-k70W3AE-6&Wj#AB)J$?L$J%ZtK-;Wf^%>jum<`;xw&7AS~8d zWxK;OxmlGpdAZQZk4B$&4 z-3f?tXn=_hxm2%Uk;1>oD{##7Tjq!Q-9xlcN9pk(n&trLJH@oDlse&0qS%-X!0)Wg ziyn*hTH3wd1u*MkjF^v+K!q{{B$*$OdJ>a9{9*z|L7Lr)-klbiefP~ak}+3)0c?(| zj01#7y>bEfxl_3~qXBFI0E`2G^AH7<2SmUJ1-0dauHL;^#*xFvLuPicWQlnVk%_yGA_-;bMKt2gotx6kQw zYY42U`KBHwqKD7pE!&&o0nH(Wfs&yNfT@AD7+VD5O7EEFtkWDwGBN=f}{-f@Wh>b0$ z84WC$fcp%g0~kk9i$euXX@Oat6$>@O$}gkA;tTzvH=MO8D90d95UxL8xnQ^jhNG^L zdlkx)T`cG9<+G%$KqzDoG`7X?kR{$FFyRW#kl_Kk1{^oPBf%&{%DDrI zCG3;Gp+mqWKi>EL-@b<7PMeI9yztV48&Eo@kyZUEma>uR%)837`%3;Nparlv53ND= zUJ{OACKOxEC|YudkRh2MKE{GN7ak!wQ}dJ5soP} zp~eybaV83NfFz=X%Oc1P6$t}mlng;BWEvI%J)IU35%m*D*gDYH2bM>jGML^kSSDFT zVH%@>i^S9r*}NNS?j$`NjLo7bJ!~$saG+_ZUBVTd<=qH&DhR{Y0lbz-eWn>3CTV`- z$t+$ip5{)fT~c8@f<`9-%p^Xl96?Xgfbt$i=-2&VSOB~Zmpo|X4}>kLb)AbYS( zgqHPO#?ASrX!UT?ASWeNDV*}eW^}152}!IwNy!W6-(%|vxpL~P@3|B%kT{noLy|{) z03#PkiBAUT5bg*%5^@}v|IR3l&N5xD3yx^C1QTpr(A2IcfKeEYjnhW2Mi8SR8Yhqj z82B;pYlNzjit9NBOb1AZ7>9*O0#=MTN&0Y6YA-(t<9ToY_{;ZFF5pr4e)F$iaX2^P zx#n!-xmUmf6O_H-?{HOF!h%o(CY{Gj$X9eYD%f@k@J5izq*7ImTa?2b#GOLxHXw5J zRdcUomkKGUu{RHn1nA6=R>6R@a^ORJ4wWqX0HdL2loWlp3?|j>r4Obfb5)k`Gu)cR zYk(ZrfRw+gmCRgxlHtUUXhor=We`_aGea<$yOpFGWe3lY zRMc2gGl2hZfld=?hN#N0YB>0i<+r#F^d&t}#u-1knn!F!-Jhj$UL66-l2O1GTd}=a z1A!O0nxW{_dO+GrXf>_^xgoB3+U0u*m5LYotJ+P3{2QC0k8Mg{g z52?#Gwj4)9);8R_A$h#W2{Y6+p33EOELHhc)yGnnODzSav1Q zCTD=0$z|iFW=TRc?}B%`5*7=@e4=zM;YLLPwUwz9krfU$zU)23@CjCFUzi$R0Ml@H z6beHi*f390Mm6;BkY~c7yLv~>p=Na$0@{U~o6yTeeV2bGYD(K|O(2N~v$D8s55cHS z5J-7IKS@=2(5@_#Ol%#;g8euc2SXkY&`MIZ2K|78X~|O|#~c{2W+k)KJ?v;#U>ytw zv4EYP)kZ>8VN#KbtjO&LW5+5Q08OT6v?lgrbw{qF5~x0+U`lh3fFN(6nW;5JyrUN= z4y)XCUq@MW°n)<}8u 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 diff --git a/mu/resources/images/check.png b/mu/resources/images/check.png deleted file mode 100644 index 06aa3e1400c53f60adc3204617a2ddc5f061f5f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7292 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 A_5c6? diff --git a/mu/resources/images/css.svg b/mu/resources/images/css.svg deleted file mode 100644 index cb818a8df..000000000 --- a/mu/resources/images/css.svg +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/mu/resources/images/debug.png b/mu/resources/images/debug.png deleted file mode 100644 index 340c8aaedc6bd7b65c611e4483d5e6fb30eba127..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8882 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 diff --git a/mu/resources/images/dropdown-arrow-night.png b/mu/resources/images/dropdown-arrow-night.png deleted file mode 100644 index f18c88358530380f733bbae9f3f635f815b61de9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iyniP){L0mz9PM>zNi`~?vd(s)=ON8`c7i>qrQ!;HHo98A0!<8Sd1jA;T& zjE_BUC7twis%xqXwg8N=V*t2DM9^AqT$W`mIp=c&5jDjigji{hilR?@oc|E)pST)oYXJZs^7Gk5^jB2@00000NkvXXu0mjfV4a%> diff --git a/mu/resources/images/dropdown-arrow.png b/mu/resources/images/dropdown-arrow.png deleted file mode 100644 index 0fde209650ab4b393da041dbbe2eb42feda76137..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1523 zcmbVMO^6&t6z(;<$r_9VA|xzA%8ts4_V4ucP8ZuQo0-|nKzcK523!?!Yr1P@+U@RY zyK8r52mISZM1x*(@e%~}!V2nVW_(h?gF@^^AC`yT!C4r0TjapmPy5cd7Z-?8&!+qVT_ zV#=>C(`Dx*bV(>9k2J8{4P%BDgxR@njNDaBK?Aq^$QHLRToi%t+2TuiM|I*NZu^y9 zf=~Ar>uzt=wLEd|MKIfij3C4mfo>Q?DeT%}pBJ(@UsgoWhtO49oaY9?vQq;^l36b)_ghHex8@)J^=D`XmCJ5jDsfwMFLXKtdR2v{5iK)1ENMJM(Z7N{ z7dA-}A|}}nQ41?^)Dl4!NLVBRNtj{gU2f-kwOFhrr0EB2BV9Ui98}9iQ?pD{(q*mh zuH(RJlu{JAxLUGB79QF6J*eh$x@Bm(gc^BEG77pT6&m@5lq)pUX0B1MP=QMtEI17BxPZ)??UI@16@(jS9I9&E0 zIsyaQP8&1Qf5?jgEG13aK?$C3v1t8=%u|^A3NPA$66Jo8{k6?D|sxAq)0&uc)nQd3rV zjjzw0d`HM@z;Fc^dmtcS5&c)*AmrwgzkWpXRMAjG+rq%b#$*(@4!=i0pnapFAgk}Y zd{W?(ZaSAy-%Z6{etPtl1O#BEBQJ?nB6s{q_2zf18|8}2S?Bo&$DPRDn)6&YRJ6i@ zn==VqUs4)gk+Wa22~HS}X$^?OtX|a~K3;}N@Iv^26JsQ!et8vS4(Ju)a9yS3xfbv* zzy4`St*VljBatVW|1p6a0y4C)YrOxa$0=S{Xx6wL8po5+rBb_2kvQ|m6#asT2S_Q zKl!*KdEp-N?;!7&SpjfttdpFUWPENg4ObUQ3-5ba;neI3uY~OfUjwV#@&1iwxd!^$ z!{PwBgG1ZNG_7K$qWp%`Ii{JZ*sYGxa9AMbdJ{(UQLkdfAs$6?5~k!cxql#%|GhD< zN6Y1wJ`2i(C^2G|9=fR#-E7rjiou*VR8gdi_BVk=vQ?kM`ZPKhK6bpS5jS!)Yd~NdbEui=nGhM+CA>cL`u44`N~eTZ-00> zG1B@=wnuv*|Bff2n$~;scUE>QVKw68Jw5T)hDr&7nyQ$<&s^ zh21p~tL_%&aVL_c8QhDWg)}FBys)!({n4HVf#WJ$`N0T(ceS)f({ap(GUv4F4%c=m z>*^_sTG(m$gARhXav!BsgICLHbbp9}hTeD4YQghfbGt|140ZjMeAc+?v(Q|VuW)wd zL9k`{Db}-uGX7~&?i-pco^i-!s^vASaNnp5J!Vw)b#77UDxGyq&BCZGZ&Ug44#{KI zSGz7hb2P)to1W<>X@a`gj(zXXhGv`MNQkx(wiLeioV+@==Vi>+X!KoV(;f8BoQ!Sb zhrc7VpR7%sf6rXv_D46PGco&Mzz4JbeyY>c>FK}>CzCk~JgY_S7sdOt{g$yPW>F76 z08w{Eb~LyoeoHc5{ek5?ChK)@Sgs^tM0E|~I-^&|ppngfd?;Z!SvYC-3oe)-;$VmO z8olqCzuLf{LaNcJZSxQ!+dv;w2@{oMT`l$bHXuB{uJLFqKjMWCc`N90tt6pDSSI|d zkB6?o?j~^V7m4+ms>2M(}OPLbK<~MZoM<@it{`P$BWEp%y@8VR9A_@N;7VP` zRHS!=IPL4H|1(A^xiGNNoy^Ny?k^f$U<*mZLPzAAuQ8Sf+=IaJMD|UU|~0KqwW>|9Lup^gLofyyE(JI5xV6$P#o6r5Tf(w+v83v zSht;F2NDZOo919ebB7gbjjFe<_$%6=eS4|K59pM810*{v6hDj6(z8dM?z?5)qJAV- zwX8yv4-mf!9uA+)%r8lndoiRF20@jJV^q9?a6(3mRp;b$$v570Mzoa>zuU9m3>3Nw zTm=cV0ZTqow8#{IEZ%760lYSny8T*oTT+<+w4uX_@k+_3F1W$MzrrWvdiUO2XG~ww zZf=rseja%P#QJ)4w_g)3=0K*Y;Ee_Q#l?EZ4{v%f=-uW4^>)?{vkN0XI7jTZUIglQ zC3?aNZhO_ztHK0nMCm$_giH5hhC8%JOp5<945ZgK0A*v}Vz1)vNb}(7+X`0}iem_J zYwt^f&kwTCu0qJUI;s=O-9fzpGgOXW_EppHe)sTXv@i|0^03T3;e_LG4R=Nfk`@pa z_N+|mX=McyD3jkqEx(T~<(e=R#gIv1+90>1Y}|pxy8*njMtrU85Q!bi7iYgv2*mOb z?j)m?5m^0U$;@U<^50OotHvsDYM_c7d>B@Q`S%LxyTz{#V$B!&p8-xrn%`HkwytQy zZ0&}!Ts7B}{Ws0|>ghC+B)L{U`ec&z@I2v7QaJ(kBd&Nk9|~JC%Jk<4x>ejCDfoEk z61DI!;b(uU0;R4UbXHl?N)2F5LQj zT1YL64(7VrB}(^w($w^5-5;H6M^uaFe<^+cPlH*-IUqU%AbL(}{>*I`|eDwmH zPyJIK6X|hrN(gltGsvMbX{j#MGP+!EocFvK=qp!N=%@2iI+f*96T!3V`FmV*56Yrx z^o9*XT9k}-G!OO$JjELi0vVJ{q zO%Rmc7Ux7d=bx)bbe7 zvIYpsL}>G>5ds!pJ24r}Y|y|rl2z2=6w4z&ZkX)W)uH_RbmtK$HUukLo4ASCQD+gb z_CRe93=6lkLJzaVB$fe^yv>apsoe4W>?w@a?rI}kFXdrbU^L@U>wchA;tSYGCPu3) z4AzwTU~lfA=q*$g`#J6eZD46hTK460dchM>f&wA9$q%#a7q7ay-UsMUnEfZLxH9&G z+_YYycl$ z7{p-+TrQPE-kP?T#}o-?tEZOlouvi^I-&vKCSOxrQ(PRN&Lj{e#(P_0iA)$vse}Sm z3Gd?J?@gnXEJs$&(H@WkVhsJ3QJeBF(W+A_o`9P*DD zAYph_gf*vC0(%o){AurJroNU-rZh=AYS2_-9^S>|PRA0&B|Wewn6M}0 z`s=mpx0}K=+xKdjmypY>$>oD;zKtsl-4ymuh)*^GYRaMt7bfzilfHg)Z98gcr8s#v z9x&P>+ukyyt7N4qeG)T09rn*kBq)M&kWc(+whO-);m(VHf~Z>g1S#sd095rUQW@H6 z62aTQRMb>yiU~V^G9xmh3{o-YS&(lHbgzu=ca>UupaeRjS-po8elzZb6YJ74N)eLe^C}F*o&@5bZ`;usatIhF8Ka-5B>*OoW zt|l{gQ+E@R+-jqbGb*nu^b0;>OkE~&x+Ugxj>K2r+=fHOQazPFrEE&&dJ5Zi(@PSc zVngptHCvCV_QbpWQ^PIwrNPj>R6U(--Yl`u%ry?bULeqdUwJ{lQxmO0Kgo3c*WP4Y zE4V%U4Pvf5&A2h-3-pvXF<2Pl-DgH#p!%aJB>XQtk&jfPggtInQc#2b>u^Jeb*}tJ zzI({;Ih@MvX3Y$h#};3cY`-mZu)T8;BiL5|iA;Rct&gcMY2h$2H+$J+lZ2$oHb>Db}SjeOP(%J)L~#W^!{%N0M1yWuH3fl^ zY$CZ;?*1+Uu&#SYDc7;~{I2F5a+x=s&S+#c2mAY8WM_5N22EfN&Jz>++;9Zk1SJ)l z3*g3n<7$O*yqXXVbyiUyoU_<~_)P4sFOls0(8pXgU@=BCjp*K;1e++dFq4ip=(5^( zY$-ktIB-1}X}Z81jJO#4bcw z3>DMzK{;srqa&>WL$LpZPW~VFhZDsSbhI_W`!zw-Rnwpz!u8hu!K&Ef-?P@7{b$y4 z_tr#;4Ua2UNOgBE8hf`o?(zq5oM10)sdB!}eY1MAvFZuXFOL8vqvf@}#?!LKy7t2; z0-6h(KqSa=75k^d`fuS5^zz z;bB39M2km?uUPzq*`r{p=#Fl4bkNUyA;d~GT;1=yiFM>UL+yE_M~ZPJlW#dCE#7Ag zU6%iS@Vh;iJf_L+D<;9q%w&{~Bj9?Y+i~-xLZY=dNP;QR9+XnQ z{$TsA;p!_1OY8?tof^d$Me4-McX!|4rS96IPG{rTp=6Bi-u2YK440bV@(SkAS+Ksn zVX=94W!m#i^7t>1qXXTypk+n|6!8}PiP#JxQ-^ctmI3&?_~Q@(?zH%4(>LKWzgpdg z%}M>k90U}AjeCtzS17!D%h5E6QVax`PtB$9R3FN~&KX)1o2m;_dG2f}l79A*PIfvO z`0KsteKbwb&QHYo-QCY0B%dGR&r+Zv=IXsrEJK1-_4z-?I{s_;=y<ywLz1MzK8f~9ohQ4g@U$7ECbI4^N7k+w4iK1PZSk3`yys{qX;6m=e+@{MTk$j zXI*Gp!rJ#Z#HE_BmCExQA&#G0a~ubDwXzGU(}QfgQv|6PE#6N$2=@aekB?K-jw`}S z%!V=?A1@2-Fs&*%Eqt*WW?#{freVLQ@g(=kSUY=n|vnf0mUU-Ky9jJFZ7Vst) zR=Ls*h7B!&!%*k)@o;Zxr$nh|%ait+Q-|uOKLUFfRw!a(aYzbExVjQvIESTq4@*M4 zDuX7=Z%7dxgzWZy8#tT$NWBWr?D%q^&f_2oNUVxGLo+TXO3X(M?N5oif*x|0`;1%J z56t7%n5R|Wes*)8XF|%y)B88XzeWe2y0#Ta;&zuk=|OF-q}XY%hn#xup zJT4|psUKn=9;<0}MS~+r6-YpX(anpWR|Rtt%7&^igbmT|N4lB6U5t+X6YF;=b41#_?0 z3UpWK)pmqh&14G!nciM4hQ=XU z;|?3^Dx*PcRDf}XQ^HLtl7dYyP^r1)%?Q*yQ9q95WPSUJ604)ygD~xQE5~+&igx+_ zZqcslI{GznK}Er@qJbA?d`*ZameRF}(B&m*i#Xi?@bjwY6(P2eNzS`62R_}DGH>}E zpx4s)Of2?Bz!^p1I^UPNYDEoiQcTnZ^FT4-PJhv^TCdJ0=9X7A$pX5lq4DMi9T0~^ z#;V^zLAnwddp*)HtCeRy=8tTvb=!?S*z#wCO#$Z+um6siYphB};b@0*0>D_#3+ppg z!$)SDdT8Snj-C-ozK0(+J+DR_W}!O$7p5k47XE9jiX5(po96q|xhdP%UShNRuo%rebU+YpKdEBPsjG96AN8EcuI`;6gLEX462#MGrelF^T^ zpbMEYAfq=0G_T*-=X=cK-Mf-2WR5*S@Osrb`ug@lZ>1Q&iE3kh2$LO5$F@f3GQ>f6I-!R+-pY$&4P`H%+oSnYpb5RD zbk|-rI^eW#EWtV!e4%c;S1DGurNlK+p}8Uq`UXVZ=}iIt0??b0bRs!SZFJLjaQvaa z^j#g?%O*O+5}IgnB_FbxqbSZaZ}fOIJT+r_LkL5o`%5Dox?a;sj z`wve;F#(~0XE<~wMIVo8?&9oP?L7yFdKW{~pejtXfjbz_6K=aM=EdaebMElL#JNNl z`+wF1PxW-t+<&QkUry7-NjJdY28)5HZU5u|6x~o+NCMlKP5uY6{U>Z zm`6Yyc?WOt_3w_d1JB)EIV?9xQ^IV4V>$&@K2a5Veot6)nEXq9sQ{SFPsr=u)=A=I z>O<&qow2^^%EdGnNBIn0v%Ib-?)ZlP^%A!k^`clf1J~}=q}`>O&-`!!tNoX&<5hV~ z@35?*+aCQ7Jrb0jO5ehLVGwzg*3py`6;{7OZKy^0lX^*@Cz6zI<90voc};~LN6?$C z{ZHGl^wkwDedGFRr~l+`uR!crszLL)5+V+@>QV~yU=gz=vN0+K>RhX|RAoj|;(A~* z?Lq|l64>jd_~fLMf=VftVLH>XCoL0-3#8Lsdz6(E6IO5h{jH6e(aU$=l?B!&R5qEillkfJ zidk-vTfdHoYIDTs=e6ZXyTMvcOfH$SYldl`^k_kRbFg*ZhT-zx_?npWqNOL(vACKx zD{O|?RdfFlGwj!$+=R;(S`J@}+cGv=j(Pi&+DdD&z$`J&B|5Br)JU6%G08-r({}67 zPgy0SS(W=T)A@x{j>B@14E6Xa(sPN#q}=GR>&Hu)Kq#edC?*#G@-)M=0kH-kX#}aZ z?$N4wcIy3re>5m*u4VtS%d+)L+N7KwQ~v&BX+94l@*!O`hWOXalK~U0uZEq=I8M)L z9$4U~)0ogVg2ez1Fnq!hFSVLF1rJK2wE$_v{FG@nC$!>?H9c_rHu#d>cZ)RO&=XpP zA0bKGY|jB;PDaR1a&D}B(ZBhaj$`+&SWU$z2u0_}dw@lI+maantmWl!nD!UJ7b zIk*jLP8sq~O_3>OR1A#pyq}@^-+=O@h$3`6lUd(8iR?%4quJi?$i$Lq4>oT^cl#+S z9$6XIeCcTWC&skkDo?SoYPtA?#}wk>1O!yB{dho{en?L`8vfI^dD027idy0DpAK~x zDp$h;BV2r(pQLSxzbqtFq-~16j%T}{a4xm5U@*(Nuke017bA(}C0TpjxA zXa3_aYs%A~C_ttpV+FoplX=%@;)~`iJCr4A2{XZo??xZ@rmBcjK9m0edk=8tz|;Oe zuk=$?xv^vhD}kS^@4a*+h}FYio4E$+*qieZACq;qS3a3^vgo7bcZ`~otODjVKlWV>S4U2EHMF_)}l|B>>m-JCo*1S`S!&d|g2>uEbu$ZfMREK>B}o`N+T zyMlzBk^qA2FNIp?oY$SkHiL&`QEL>pYl&x~SJukk4qkMEzz1-?+i&5NW~s+KG1H*QO*e z#j|CU9vz9h2JBbM0YiCYmL8=aIC|l~1lpqtHas=LGM6or{tP0y4z%NsA_>LChK{F&S;m`oLlb)P)G$MF!pL~-p z(Y&W;+UcX=BUiN+8_T5?E{oLv3pQ56+w3EX!Cw0N|I0PzonO(GY}rXE$q-sC1^|yL zTK<(TEf%nT^1pE|fzbK#Mb<}dM$LEr>qHYkof@z_BKY!zGP+u`ruu&j#d7@zAM8^v zQCdf2!0yQBLoScAL*Q9m_$CUz1YRcx*B326&%&@>?=R9eV@_qQYP9c6rhR$>NONwq zw()oh3{6K@nDRVdv?3k0xzpQgy6X=%CD&B#&kJx1Z8pu(hdB!|*f9-I1MP*u-g53u zz!MwXi9W)rBF7O8CRlvE3E<6kT0m65W8Oh*cRnOWyI|8Cd0f-gE4&FSf9zXS&09oC z@QUCtQU;jd4*GEtR$SErf9%5%Vfs?Xmz`R=YHl{y?o48*7jYGrqZmi*ZF< zKWulf^c99V%^sUO0tZW7x#(x^wQiTW3*gxL8qrFeVr=;{c$@i;L#q%3A?D)yA)&53 z)81=j`K_vhmnt=eIA!Iik4IS|3~>Emf^TJ8*eO^W0O+|tV)1;{5xi>5D_)D5czjUu zl_ts&P~`n4`h7@G3sU2L^hQkV0xoR;i&Fj%e8(9#eq?sOG*+F9{zIM4V&`l4KVYdF#(Cu@ z4R)Zv=&2rzsq5M3tlGbC-iKQ-D!*`E?d}|$E9+cFv@)@c#h>sKj~z diff --git a/mu/resources/images/load.png b/mu/resources/images/load.png deleted file mode 100644 index 39b1b16eef09cd0669d7b0683345ab6c22be28f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6910 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 qCA=@ymWI_S;7N93BQ_;@m1G20u(Be#j<1uv zPBIt2;Bu0ENg7Ng(NxRZiqi$)Kb*pLd}y%!ge{m;?)N77aoP%!^zc277>@mbqe;el zgD1~Bv-4FUWJpGU-|!yMM<7QlVl|pV-#O?eEEhX*V^^nI)8ziRm=o#;1d35l1$Bz z&#@${yI!>VW(;2r0_b6K27+64XLfY!xtSF2%~BEXQ&khQ5sYI{nm+GZL3KYmAa)Yt zJ?y~YQiioHP4YjImdK0oO$YFG9K?=xna;sK9V8F1G0FXE6$^0&3o8E?SdrvGzf9X- zbgayzF8dW1%JsT3TAB{OD`o$fE^?Aj%2XU=8}M^EwhRD=B}o?5({uzEv1Ula?kc`b z^145Z-r(*Kr|Ip!o=vrv9>uQW^c;U;2|n)VnTay+#>#k}*WZAWY=5UgMX($DiIEw>)@IG#@qjC1(yCi=V(#JSofluN0B#%n`6Kunt`sbl}pM)k^ kUh>-hZP}gV_-wIn0olLxbjABS+5i9m07*qoM6N<$f+SizLI3~& diff --git a/mu/resources/images/new.png b/mu/resources/images/new.png deleted file mode 100644 index 1b73546229705acc079b310bfaf9a83f3838e99b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6385 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 diff --git a/mu/resources/images/python.png b/mu/resources/images/python.png deleted file mode 100644 index 1d526cf972d5d0e70c60c7aa2b9f2eb1456e3bb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4646 zcmV+>64~vEP)#twM_s35wl4| zK~#9!?VWv?6xEf+f48R@Kv1KCCYqJFE23gV1*RK82p||m0hMJH6~$dOiCGoQf*=|n zR{_^dMzf;N>S7j&dHg^lLyR97UHR-D!RP=k8iNo8zla~12n;h_@BUHU)78^e)zv*c zJN|bjd(M0AIp^Lsbl~fIx4ptwyFcf(c^9;_MQ1GugDMdrP)`V*2-XRL ze*lg~Ivh9@=mzQrbV5MOA2lMr1pW&81o#km59w_q-jLCsfo7oTPrG(C?YM6W0R5)_ zk|TE=!E^t4PDhFa!(Q-;&iZX7B#s7p0mDGU5Ceb%>^qbcw;WH&@#bi6xyP-ouyK&87-OQ9K_ z=1o9tBjF3)`1wUv)zn9*tC?J0fDE|#Y1ZC(0Rw;fY(+(LViDrvOhN25U^s8sB5814 z&E)L>(d!=}c5nLw6DkEDYwx^(L9=TsDw-3w<^qGjU{E+1xPXy;{2gP=vd9gO90SmJ zP-A(Stmw_P5yUd!Ko2lJ2gL`$>YO8*RU55xGNYcCk^qk)x{5?=NBLI?N6LvIt z#Ub!)jdI-ac42i}dUJGfG$cB639-53?2yLnrG%_RC885hVaMF^sG0JbYy}}_e;eNj z>Qr}y%{@)4E`-tU8&jX(&O*eY$EZDgNGhkhCK%%pj0$&lE zGmhvvOW+iGV_E%x(Le+^2I%f-WEHec!P;`aOi>A3URngew}CT#z;Hfx1qKjLYUAh{ zu-2IqU)YnEhD2x95}T7O*_pNEcwh=J4%Ejbgl_VisO`$G=>b7)-=%FDV}hzzR5Lf?x-1f zu%M$qfwu<3#|2lexl7jPpNaG$Fxd2a#a%-p(|>1c$DFay*_wjU&)mT%B%V}CGbIm! z6=0@vMtgIBAvZ8u&QI6+kq@`D)(_7FB-CYR%1oUNTF~|&U4dY9VuIaxNE(pntXkIGK7r`0+M|Jo-8z()d+VwhDqJ&M?X}But@~)r89th! zz?$J`xBN82r(a*KkpX6^enby*^3&+e5jG&PIb%}~-2r?vy9#|@An@G47DV7#Rss(* z<1nxE3C+fq`t!l;8+KTEI9@=dOv~tm?@(M$7NFx7~V4K4Emnl z7*>(=veXB0@_qvMFjE2p@3#um7;k>@&c)Yo3`b`^(+M#=%ht+k6t#B_Jf8q# zo+0!?LMttcd$rxs*qxTuzaD+$HdC#?dlb|y1XQL1WgSo8IX%s=f%;2Gye)B<||v~hG-#L@mUavv}xzghmEFzEOks?@Hd z*?(HxK?I)p+-EW@t-Jr)RBdlh;DlfR1OX%Cwt->6srxmw)` z^S)u=grX66pvsMXfWXryZvxeI^MBm5qV_U|9Q#oi=^T49m$z%{4~Bi;ks+jGibCM7 z0^BDFJoUZ}7+-h)wc7yB7`q584g#(Z?m-a@jPyxGh?a#Y`^}W2^R;0(rSAS~w+y}R z7tYzoY~)zDnhOjmcl@iBjKjcT`w3hCO`vy>SycDHkM05(dBeT@{+{dX+cu0kH@W*n z0bt~a(K(L8pl^JQHKPIaN1H3OicsRYy8Eu%4sh$eGr0Zw>r-Hi0Df7RW+;$mq~5}a z&K*qPZvkr&?*g9!UjdCE<37Tbj9diF>KSMFr6mNFKzs)J68K99K8oFc?e5gYkJpap zhyiz{z!(qQ3+myn*g=2^21d$cRkjZpz9ugL+-)!mgtZMBE7@j+KuUyALJ&#`FqFK! z8$uQp&Tvu)FwRV&i`R@ zUEzs9C+~ke-$YOjyB$^Phfp8scyTicS?V%aTlZ8O@%IeGQ)27Nv!1(;Z2q2umf^rL= zw6pdFcM>**LFLFdSfs4@i9dnje)_y--HzEBm^~ud4tjFnqgH)Si3-*i)f}&Zy$jE zYR|mKS70$Xqn;_BQ56`Be8LqSX{J2-Fy_?|(1ch~FoAm~ggyuDN@_}7BTsCba% zPa(0RB5Fpi)Iu=8HzR9%D5TIH(C@Q4_AFw{+StowVX}Bs}n`QD)g3v5U58+MW6x#CscU{S??&r<3NeL z3Eb`8gvm3Bl!KROOBlT^oRNo<5Nu*;Fj`47yX=U(IorK>6sY7B%c{mA0GgGc( zxd}W|Gt$e*5_x9gRKTRH0L>_J9y~xF?*jJ#<4h#>A0|?7DIRgf&3!kZ8x|6~=W^mT zlUGKjF1!?JH1GrLU%d%hgAjMdZheR&7%_|m$;nEtEU zvy0Mf*Q|HOBmv=2e{Uy9zQKbVnspQ={3*r?*_NyI#+4>LZfyX`tfC`XZrYr@=4dwn zYBHy-YWK~1OZn>v6b42BH(NjjcR}-RI|-I7?zLLgje3U7t<-0vgVWBwExG{r0kQG| zL{IcPYd^Xe1S;|u^&B!apRz`p*XUPzG*Y}bmbm0$7 z0{9=$^5if4i~uJ4MiR>E7k2#Ip1dj-gMggVoB9%aEy_lOMIrA$>QuMfraUy*8U1XgJ6;9G$C_Cna8TgC2+q;5w)L+&G&B36jx zbP_h0{>xv~x?z~pmZvYphbCv_W(i`G$Nv#3A3$tEtjKm@^Q@g}d+K$i{g(OD=q6%= zWBRY$0s6wV4zTm$}R6 zW1OuCnGsvnoo>IscKRv6QLcTM(x^yj06DlvBjTyRVB}p!8rVtbrgcN+XUV#1HL5$k zD{wV(thdZGg&Rs`+e@P(Z=Ll`(Bp`q!NV0n!N@!H`T%f0(q~B-9FYX$8V@kuClNZH z1Ham7zFS`&fBMGEK?gH@%l@v!a z@^PP+BQwDaihWvM6GL!$2-dSEQrDL{ zy{~ZRB5TR}z#G77q&3O&4@@Msr=thw-k~9D&%_LPDSiI>2t$PxPX3~3C(vQZ9fNv< zz76z590ocF(T$cGpJbRu+Ks(c;1`G;$^Be5gEnEzdsu2hGy_d0vL=y^bPa_AzrggX c?=V^XKlTqhvkFTHdjJ3c07*qoM6N<$f_A>C-T(jq diff --git a/mu/resources/images/quit.png b/mu/resources/images/quit.png deleted file mode 100644 index 8e102312428f3ee2ef55208be3afd8572391f246..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8358 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 diff --git a/mu/resources/images/run.png b/mu/resources/images/run.png deleted file mode 100644 index f3d301671fc1ee04eff9ef999ce9691f1a0b7e3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8074 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 Y1>W!WSJ4A;wg3PC07*qoM6N<$f+fJ-dH?_b diff --git a/mu/resources/images/save.png b/mu/resources/images/save.png deleted file mode 100644 index 1b253479631557f1ff88b5398065a5fd7eb17b56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7046 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 diff --git a/mu/resources/images/scroll-left.png b/mu/resources/images/scroll-left.png deleted file mode 100644 index 05e47d85fd45b354a23ca00ec9da52fd11732f57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 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 diff --git a/mu/resources/images/step-out.png b/mu/resources/images/step-out.png deleted file mode 100644 index d480df3d8dcff7d8b505e678ec0e67da9446b1ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6523 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 diff --git a/mu/resources/images/step-over.png b/mu/resources/images/step-over.png deleted file mode 100644 index bbc8a07f93b8cea8cd4898293d5794911121867c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6565 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 G2mcRT@^l6O diff --git a/mu/resources/images/stop.png b/mu/resources/images/stop.png deleted file mode 100644 index 2de18148287ad9ecddf1560be935c163f85df4d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8492 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 diff --git a/mu/resources/images/theme.png b/mu/resources/images/theme.png deleted file mode 100644 index ffffd479d81e7c010be3460a683d387722a3c070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9653 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 diff --git a/mu/resources/images/tidy.png b/mu/resources/images/tidy.png deleted file mode 100644 index ddb9904ef1af9c8e0d3abb45d96d46a541589a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6375 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 Date: Sun, 8 Nov 2026 12:35:25 -0500 Subject: [PATCH 14/18] Tidy Mu's repo leftovers: unused CodeQL config, Web API generator, video target - .github/codeql/codeql-config.yml ("Mu CodeQL configuration", ignoring the long-gone esptool.py): no workflow used it. - utils/flask_api.py and flask.json: built the removed Web mode's Flask API stubs. - `make video` ("The Making of Mu") and utils/avatar.py, plus their clean-up steps. - utils/gh_downloads.py counts Nu's releases (it still pointed at mu-editor/mu); the Makefile, make.py, the utils README and the CI step name say Nu. Co-Authored-By: Claude Opus 5.5 --- .github/codeql/codeql-config.yml | 4 - .github/workflows/test.yml | 2 +- Makefile | 14 +- make.py | 8 +- utils/README.rst | 7 +- utils/avatar.py | 58 --- utils/flask.json | 756 ------------------------------- utils/flask_api.py | 106 ----- utils/gh_downloads.py | 4 +- 9 files changed, 13 insertions(+), 946 deletions(-) delete mode 100644 .github/codeql/codeql-config.yml delete mode 100644 utils/avatar.py delete mode 100644 utils/flask.json delete mode 100644 utils/flask_api.py diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml deleted file mode 100644 index b6b44382a..000000000 --- a/.github/codeql/codeql-config.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: "Mu CodeQL configuration" - -paths-ignore: - - mu/contrib/esptool.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2e13aa1f6..814d9334c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -51,7 +51,7 @@ jobs: # The bundled plugins (plugins/*) are nu-editor dependencies that uv # resolves from the workspace; pip needs their paths given explicitly. # micro:bit is opt-in (nu-editor's `microbit` extra) but tested here too. - - name: Install Mu dependencies + - name: Install Nu dependencies run: | python -m pip install --upgrade pip pip install ./plugins/circuitpython ./plugins/pygamezero ./plugins/microbit ".[dev]" diff --git a/Makefile b/Makefile index f7acf63aa..dd9126240 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ GREP_T_FLAG := $(shell test $$(uname) = Linux && echo -T) all: @echo "\nThere is no default Makefile target right now. Try:\n" - @echo "make run - run the local development version of Mu." + @echo "make run - run the local development version of Nu." @echo "make clean - reset the project and remove auto-generated assets." @echo "make lint - run the ruff code checker." @echo "make test - run the test suite." @@ -18,12 +18,11 @@ all: @echo "make docs-serve - serve the documentation locally with live reload." @echo "make translate_begin LANG=xx_XX - create/update a mu.po file for translation." @echo "make translate_done LANG=xx_XX - compile translation strings in mu.po to mu.mo file." - @echo "make translate_test LANG=xx_XX - run translate_done and launch Mu in the given LANG." + @echo "make translate_test LANG=xx_XX - run translate_done and launch Nu in the given LANG." @echo "make translate_status - show how complete each translation is." @echo "make win64 - build a 64bit Windows MSI installer (Briefcase)." @echo "make macos - build a macOS native application (Briefcase)." @echo "make linux - build a Linux AppImage (Briefcase)." - @echo "make video - create an mp4 video representing code commits.\n" clean: rm -rf build @@ -34,8 +33,6 @@ clean: rm -rf site rm -rf .pytest_cache rm -rf lib - rm -rf *.mp4 - rm -rf .git/avatar/* find . \( -name '*.py[co]' -o -name dropin.cache \) -delete find . \( -name '*.bak' -o -name dropin.cache \) -delete find . \( -name '*.tgz' -o -name dropin.cache \) -delete @@ -45,7 +42,7 @@ clean: run: clean ifeq ($(VIRTUAL_ENV),) - @echo "\n\nCannot run Mu. Your Python virtualenv is not activated." + @echo "\n\nCannot run Nu. Your Python virtualenv is not activated." else python run.py endif @@ -123,8 +120,3 @@ linux: check @echo "\nBuilding Linux AppImage (Briefcase)." python make.py linux -video: clean - @echo "\nFetching contributor avatars." - python utils/avatar.py - @echo "\nMaking video of source commits." - gource --user-image-dir .git/avatar/ --title "The Making of Mu" --logo docs/icon_small.png --font-size 24 --file-idle-time 0 --key -1280x720 -s 0.1 --auto-skip-seconds .1 --multi-sampling --stop-at-end --hide mouse,progress --output-ppm-stream - --output-framerate 30 | ffmpeg -y -r 30 -f image2pipe -vcodec ppm -i - -b 65536K movie.mp4 diff --git a/make.py b/make.py index 07f0c9fa4..06deb0dc8 100644 --- a/make.py +++ b/make.py @@ -178,11 +178,9 @@ def clean(): _rmtree("site") # MkDocs build output _rmtree(".pytest_cache") _rmtree("lib") - _rmtree(".git/avatar/") # Created with `make video` # TODO: recursive __pycache__ directories _rmfiles(".", ".coverage") _rmfiles(".", "*.egg-info") - _rmfiles(".", "*.mp4") # Created with `make video` _rmfiles(".", "*.pyc") _rmfiles("mu/locale", "*.pot") _rmfiles("mu/wheels", "*.zip") @@ -344,7 +342,7 @@ def translate_status(): @export def translate_test(lang=""): - """Run translate_done and launch Mu in the given LANG.""" + """Run translate_done and launch Nu in the given LANG.""" result = translate_done(lang) if result != 0: raise RuntimeError("Failed compiling the mu.po file.") @@ -356,10 +354,10 @@ def translate_test(lang=""): @export def run(): - """Run Mu from within a virtual environment""" + """Run Nu from within a virtual environment""" clean() if not os.environ.get("VIRTUAL_ENV"): - raise RuntimeError("Cannot run Mu;your Python virtualenv is not activated") + raise RuntimeError("Cannot run Nu; your Python virtualenv is not activated") return subprocess.run([sys.executable, "-m", "mu"]).returncode diff --git a/utils/README.rst b/utils/README.rst index d58c0bead..c90fdcdc5 100644 --- a/utils/README.rst +++ b/utils/README.rst @@ -1,6 +1,7 @@ Utilities ========= -This directory contains utilities used to help maintain Mu. For example, -scripts used to extract API documentation for use in Mu's auto-suggest and -tool tips. +This directory contains utilities used to help maintain Nu. For example, +scripts used to extract API documentation for use in Nu's auto-suggest and +tool tips, and make_artwork.py, which draws the splash screens and the Mode +button from the app icon. diff --git a/utils/avatar.py b/utils/avatar.py deleted file mode 100644 index 8a273dc9d..000000000 --- a/utils/avatar.py +++ /dev/null @@ -1,58 +0,0 @@ -# Grab Gravatar images for the contributors listed in the GIT log. -import os -import subprocess -import shutil -import hashlib -import requests - - -def get_gravatar(email): - """ - Given an email, attempt to get the gravatar image associated with it. - """ - md5 = hashlib.md5(email.encode("utf-8")).hexdigest() - url = f"http://www.gravatar.com/avatar/{md5}?d=404&size=90" - return requests.get(url, stream=True) - - -def get_github(username): - """ - Given a GitHub username, attempt to get the user's avatar. - """ - url = f"https://github.com/{username}.png" - return requests.get(url, stream=True) - - -def get_gitlog(): - """ - Get unique tuples of username / email address from GIT log. - """ - command = ["git", "log", "--pretty=format:%an|%ae"] - raw = subprocess.check_output(command, stderr=subprocess.STDOUT).decode("utf-8") - lines = raw.split("\n") - result = set() - for line in lines: - username, email = line.split("|") - result.add((username, email)) - return tuple(result) - - -users = get_gitlog() -path = os.path.abspath(os.path.join(".git", "avatar")) -if not os.path.exists(path): - os.makedirs(path) - -for username, email in users: - print(f"Processing {username} {email}") - if email.rpartition("@")[2] == "users.noreply.github.com": - raw_username, _ = email.split("@") - response = get_github(raw_username) - _, mime = response.headers["content-type"].split("/") - else: - response = get_gravatar(email) - _, mime = response.headers["content-type"].split("/") - if response.status_code == 200: - filename = os.path.join(path, f"{username}.{mime}") - with open(filename, "wb") as out_file: - print(f"Writing to {filename}") - shutil.copyfileobj(response.raw, out_file) diff --git a/utils/flask.json b/utils/flask.json deleted file mode 100644 index 8cd360ed9..000000000 --- a/utils/flask.json +++ /dev/null @@ -1,756 +0,0 @@ -[ -{"name": "has_request_context", "args": [], "description": "If you have code that wants to test if a request context is there or\nnot this function can be used. For instance, you may want to take advantage\nof request information if the request object is available, but fail\nsilently if it is unavailable.\nclass User(db.Model):\n\n def __init__(self, username, remote_addr=None):\n self.username = username\n if remote_addr is None and has_request_context():\n remote_addr = request.remote_addr\n self.remote_addr = remote_addr\n\n\nAlternatively you can also just test any of the context bound objects\n(such as request or g for truthness):\nclass User(db.Model):\n\n def __init__(self, username, remote_addr=None):\n self.username = username\n if remote_addr is None and request:\n remote_addr = request.remote_addr\n self.remote_addr = remote_addr\n\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "copy_current_request_context", "args": ["f"], "description": "A helper function that decorates a function to retain the current\nrequest context. This is useful when working with greenlets. The moment\nthe function is decorated a copy of the request context is created and\nthen pushed when the function is called.\nExample:\nimport gevent\nfrom flask import copy_current_request_context\n\n@app.route('/')\ndef index():\n @copy_current_request_context\n def do_some_work():\n # do some work here, it can access flask.request like you\n # would otherwise in the view function.\n ...\n gevent.spawn(do_some_work)\n return 'Regular response'\n\n\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "has_app_context", "args": [], "description": "Works like has_request_context() but for the application\ncontext. You can also just do a boolean check on the\ncurrent_app object instead.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "url_for", "args": ["endpoint", "**values"], "description": "Generates a URL to the given endpoint with the method provided.\nVariable arguments that are unknown to the target endpoint are appended\nto the generated URL as query arguments. If the value of a query argument\nis None, the whole pair is skipped. In case blueprints are active\nyou can shortcut references to the same blueprint by prefixing the\nlocal endpoint with a dot (.).\nThis will reference the index function local to the current blueprint:\nurl_for('.index')\n\n\nFor more information, head over to the Quickstart.\nTo integrate applications, Flask has a hook to intercept URL build\nerrors through Flask.url_build_error_handlers. The url_for\nfunction results in a BuildError when the current\napp does not have a URL for the given endpoint and values. When it does, the\ncurrent_app calls its url_build_error_handlers if\nit is not None, which can return a string to use as the result of\nurl_for (instead of url_for\u2019s default to raise the\nBuildError exception) or re-raise the exception.\nAn example:\ndef external_url_handler(error, endpoint, values):\n \"Looks up an external URL when `url_for` cannot build a URL.\"\n # This is an example of hooking the build_error_handler.\n # Here, lookup_url is some utility function you've built\n # which looks up the endpoint in some external URL registry.\n url = lookup_url(endpoint, **values)\n if url is None:\n # External lookup did not have a URL.\n # Re-raise the BuildError, in context of original traceback.\n exc_type, exc_value, tb = sys.exc_info()\n if exc_value is error:\n raise exc_type, exc_value, tb\n else:\n raise error\n # url_for will use this result, instead of raising BuildError.\n return url\n\napp.url_build_error_handlers.append(external_url_handler)\n\n\nHere, error is the instance of BuildError, and\nendpoint and values are the arguments passed into url_for. Note\nthat this is for building URLs outside the current application, and not for\nhandling 404 NotFound errors.\n\nChangelog\nNew in version 0.10: The _scheme parameter was added.\n\n\nNew in version 0.9: The _anchor and _method parameters were added.\n\n\nNew in version 0.9: Calls Flask.handle_build_error() on\nBuildError.\n\n\n\n\n\nParameters:\nendpoint \u2013 the endpoint of the URL (name of the function)\nvalues \u2013 the variable arguments of the URL rule\n_external \u2013 if set to True, an absolute URL is generated. Server\naddress can be changed via SERVER_NAME configuration variable which\ndefaults to localhost.\n_scheme \u2013 a string specifying the desired URL scheme. The _external\nparameter must be set to True or a ValueError is raised. The default\nbehavior uses the same scheme as the current request, or\nPREFERRED_URL_SCHEME from the app configuration if no\nrequest context is available. As of Werkzeug 0.10, this also can be set\nto an empty string to build protocol-relative URLs.\n_anchor \u2013 if provided this is added as anchor to the URL.\n_method \u2013 if provided this explicitly specifies an HTTP method.\n\n\n\n\n\n"}, -{"name": "abort", "args": ["status", "*args", "**kwargs"], "description": "Raises an HTTPException for the given status code or WSGI\napplication:\nabort(404) # 404 Not Found\nabort(Response('Hello World'))\n\n\nCan be passed a WSGI application or a status code. If a status code is\ngiven it\u2019s looked up in the list of exceptions and will raise that\nexception, if passed a WSGI application it will wrap it in a proxy WSGI\nexception and raise that:\nabort(404)\nabort(Response('Hello World'))\n\n\n"}, -{"name": "redirect", "args": ["location", "code=302", "Response=None"], "description": "Returns a response object (a WSGI application) that, if called,\nredirects the client to the target location. Supported codes are 301,\n302, 303, 305, and 307. 300 is not supported because it\u2019s not a real\nredirect and 304 because it\u2019s the answer for a request with a request\nwith defined If-Modified-Since headers.\n\nChangelog\nNew in version 0.10: The class used for the Response object can now be passed in.\n\n\nNew in version 0.6: The location can now be a unicode string that is encoded using\nthe iri_to_uri() function.\n\n\n\n\n\nParameters:\nlocation \u2013 the location the response should redirect to.\ncode \u2013 the redirect status code. defaults to 302.\nResponse (class) \u2013 a Response class to use when instantiating a\nresponse. The default is werkzeug.wrappers.Response if\nunspecified.\n\n\n\n\n\n"}, -{"name": "make_response", "args": ["*args"], "description": "Sometimes it is necessary to set additional headers in a view. Because\nviews do not have to return response objects but can return a value that\nis converted into a response object by Flask itself, it becomes tricky to\nadd headers to it. This function can be called instead of using a return\nand you will get a response object which you can use to attach headers.\nIf view looked like this and you want to add a new header:\ndef index():\n return render_template('index.html', foo=42)\n\n\nYou can now do something like this:\ndef index():\n response = make_response(render_template('index.html', foo=42))\n response.headers['X-Parachutes'] = 'parachutes are cool'\n return response\n\n\nThis function accepts the very same arguments you can return from a\nview function. This for example creates a response with a 404 error\ncode:\nresponse = make_response(render_template('not_found.html'), 404)\n\n\nThe other use case of this function is to force the return value of a\nview function into a response which is helpful with view\ndecorators:\nresponse = make_response(view_function())\nresponse.headers['X-Parachutes'] = 'parachutes are cool'\n\n\nInternally this function does the following things:\n\nif no arguments are passed, it creates a new response argument\nif one argument is passed, flask.Flask.make_response()\nis invoked with it.\nif more than one argument is passed, the arguments are passed\nto the flask.Flask.make_response() function as tuple.\n\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "after_this_request", "args": ["f"], "description": "Executes a function after this request. This is useful to modify\nresponse objects. The function is passed the response object and has\nto return the same or a new one.\nExample:\n@app.route('/')\ndef index():\n @after_this_request\n def add_header(response):\n response.headers['X-Foo'] = 'Parachute'\n return response\n return 'Hello World!'\n\n\nThis is more useful if a function other than the view function wants to\nmodify a response. For instance think of a decorator that wants to add\nsome headers without converting the return value into a response object.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "send_file", "args": ["filename_or_fp", "mimetype=None", "as_attachment=False", "attachment_filename=None", "add_etags=True", "cache_timeout=None", "conditional=False", "last_modified=None"], "description": "Sends the contents of a file to the client. This will use the\nmost efficient method available and configured. By default it will\ntry to use the WSGI server\u2019s file_wrapper support. Alternatively\nyou can set the application\u2019s use_x_sendfile attribute\nto True to directly emit an X-Sendfile header. This however\nrequires support of the underlying webserver for X-Sendfile.\nBy default it will try to guess the mimetype for you, but you can\nalso explicitly provide one. For extra security you probably want\nto send certain files as attachment (HTML for instance). The mimetype\nguessing requires a filename or an attachment_filename to be\nprovided.\nETags will also be attached automatically if a filename is provided. You\ncan turn this off by setting add_etags=False.\nIf conditional=True and filename is provided, this method will try to\nupgrade the response stream to support range requests. This will allow\nthe request to be answered with partial content response.\nPlease never pass filenames to this function from user sources;\nyou should use send_from_directory() instead.\n\nChanged in version 1.0: UTF-8 filenames, as specified in RFC 2231, are supported.\n\n\nChangelog\nChanged in version 0.12: The filename is no longer automatically inferred from file objects. If\nyou want to use automatic mimetype and etag support, pass a filepath via\nfilename_or_fp or attachment_filename.\n\n\nChanged in version 0.12: The attachment_filename is preferred over filename for MIME-type\ndetection.\n\n\nChanged in version 0.9: cache_timeout pulls its default from application config, when None.\n\n\nChanged in version 0.7: mimetype guessing and etag support for file objects was\ndeprecated because it was unreliable. Pass a filename if you are\nable to, otherwise attach an etag yourself. This functionality\nwill be removed in Flask 1.0\n\n\nNew in version 0.5: The add_etags, cache_timeout and conditional parameters were\nadded. The default behavior is now to attach etags.\n\n\nNew in version 0.2.\n\n\n\n\n\nParameters:\nfilename_or_fp \u2013 the filename of the file to send.\nThis is relative to the root_path\nif a relative path is specified.\nAlternatively a file object might be provided in\nwhich case X-Sendfile might not work and fall\nback to the traditional method. Make sure that the\nfile pointer is positioned at the start of data to\nsend before calling send_file().\nmimetype \u2013 the mimetype of the file if provided. If a file path is\ngiven, auto detection happens as fallback, otherwise an\nerror will be raised.\nas_attachment \u2013 set to True if you want to send this file with\na Content-Disposition: attachment header.\nattachment_filename \u2013 the filename for the attachment if it\ndiffers from the file\u2019s filename.\nadd_etags \u2013 set to False to disable attaching of etags.\nconditional \u2013 set to True to enable conditional responses.\ncache_timeout \u2013 the timeout in seconds for the headers. When None\n(default), this value is set by\nget_send_file_max_age() of\ncurrent_app.\nlast_modified \u2013 set the Last-Modified header to this value,\na datetime or timestamp.\nIf a file was passed, this overrides its mtime.\n\n\n\n\n\n"}, -{"name": "send_from_directory", "args": ["directory", "filename", "**options"], "description": "Send a file from a given directory with send_file(). This\nis a secure way to quickly expose static files from an upload folder\nor something similar.\nExample usage:\n@app.route('/uploads/')\ndef download_file(filename):\n return send_from_directory(app.config['UPLOAD_FOLDER'],\n filename, as_attachment=True)\n\n\n\nSending files and Performance\nIt is strongly recommended to activate either X-Sendfile support in\nyour webserver or (if no authentication happens) to tell the webserver\nto serve files for the given path on its own without calling into the\nweb application for improved performance.\n\n\nChangelog\nNew in version 0.5.\n\n\n\n\n\nParameters:\ndirectory \u2013 the directory where all the files are stored.\nfilename \u2013 the filename relative to that directory to\ndownload.\noptions \u2013 optional keyword arguments that are directly\nforwarded to send_file().\n\n\n\n\n\n"}, -{"name": "safe_join", "args": ["directory", "*pathnames"], "description": "Safely join directory and zero or more untrusted pathnames\ncomponents.\nExample usage:\n@app.route('/wiki/')\ndef wiki_page(filename):\n filename = safe_join(app.config['WIKI_FOLDER'], filename)\n with open(filename, 'rb') as fd:\n content = fd.read() # Read and process the file content...\n\n\n\n\n\n\nParameters:\ndirectory \u2013 the trusted base directory.\npathnames \u2013 the untrusted pathnames relative to that directory.\n\n\n\nRaises:NotFound if one or more passed\npaths fall out of its boundaries.\n\n\n\n\n"}, -{"name": "escape", "args": ["s"], "description": "Convert the characters &, <, >, \u2018, and \u201d in string s to HTML-safe\nsequences. Use this if you need to display text that might contain\nsuch characters in HTML. Marks return value as markup string.\n"}, -{"name": "flash", "args": ["message", "category='message'"], "description": "Flashes a message to the next request. In order to remove the\nflashed message from the session and to display it to the user,\nthe template has to call get_flashed_messages().\n\nChangelog\nChanged in version 0.3: category parameter added.\n\n\n\n\n\nParameters:\nmessage \u2013 the message to be flashed.\ncategory \u2013 the category for the message. The following values\nare recommended: 'message' for any kind of message,\n'error' for errors, 'info' for information\nmessages and 'warning' for warnings. However any\nkind of string can be used as category.\n\n\n\n\n\n"}, -{"name": "get_flashed_messages", "args": ["with_categories=False", "category_filter=[]"], "description": "Pulls all flashed messages from the session and returns them.\nFurther calls in the same request to the function will return\nthe same messages. By default just the messages are returned,\nbut when with_categories is set to True, the return value will\nbe a list of tuples in the form (category, message) instead.\nFilter the flashed messages to one or more categories by providing those\ncategories in category_filter. This allows rendering categories in\nseparate html blocks. The with_categories and category_filter\narguments are distinct:\n\nwith_categories controls whether categories are returned with message\ntext (True gives a tuple, where False gives just the message text).\ncategory_filter filters the messages down to only those matching the\nprovided categories.\n\nSee Message Flashing for examples.\n\nChangelog\nChanged in version 0.9: category_filter parameter added.\n\n\nChanged in version 0.3: with_categories parameter added.\n\n\n\n\n\nParameters:\nwith_categories \u2013 set to True to also receive categories.\ncategory_filter \u2013 whitelist of categories to limit return values\n\n\n\n\n\n"}, -{"name": "jsonify", "args": ["*args", "**kwargs"], "description": "This function wraps dumps() to add a few enhancements that make\nlife easier. It turns the JSON output into a Response\nobject with the application/json mimetype. For convenience, it\nalso converts multiple arguments into an array or multiple keyword arguments\ninto a dict. This means that both jsonify(1,2,3) and\njsonify([1,2,3]) serialize to [1,2,3].\nFor clarity, the JSON serialization behavior has the following differences\nfrom dumps():\n\nSingle argument: Passed straight through to dumps().\nMultiple arguments: Converted to an array before being passed to\ndumps().\nMultiple keyword arguments: Converted to a dict before being passed to\ndumps().\nBoth args and kwargs: Behavior undefined and will throw an exception.\n\nExample usage:\nfrom flask import jsonify\n\n@app.route('/_get_current_user')\ndef get_current_user():\n return jsonify(username=g.user.username,\n email=g.user.email,\n id=g.user.id)\n\n\nThis will send a JSON response like this to the browser:\n{\n \"username\": \"admin\",\n \"email\": \"admin@localhost\",\n \"id\": 42\n}\n\n\n\nChangelog\nChanged in version 0.11: Added support for serializing top-level arrays. This introduces a\nsecurity risk in ancient browsers. See JSON Security for details.\n\nThis function\u2019s response will be pretty printed if the\nJSONIFY_PRETTYPRINT_REGULAR config parameter is set to True or the\nFlask app is running in debug mode. Compressed (not pretty) formatting\ncurrently means no indents and no spaces after separators.\n\nChangelog\nNew in version 0.2.\n\n"}, -{"name": "dumps", "args": ["obj", "**kwargs"], "description": "Serialize obj to a JSON formatted str by using the application\u2019s\nconfigured encoder (json_encoder) if there is an\napplication on the stack.\nThis function can return unicode strings or ascii-only bytestrings by\ndefault which coerce into unicode strings automatically. That behavior by\ndefault is controlled by the JSON_AS_ASCII configuration variable\nand can be overridden by the simplejson ensure_ascii parameter.\n"}, -{"name": "dump", "args": ["obj", "fp", "**kwargs"], "description": "Like dumps() but writes into a file object.\n"}, -{"name": "loads", "args": ["s", "**kwargs"], "description": "Unserialize a JSON object from a string s by using the application\u2019s\nconfigured decoder (json_decoder) if there is an\napplication on the stack.\n"}, -{"name": "load", "args": ["fp", "**kwargs"], "description": "Like loads() but reads from a file object.\n"}, -{"name": "render_template", "args": ["template_name_or_list", "**context"], "description": "Renders a template from the template folder with the given\ncontext.\n\n\n\n\nParameters:\ntemplate_name_or_list \u2013 the name of the template to be\nrendered, or an iterable with template names\nthe first one existing will be rendered\ncontext \u2013 the variables that should be available in the\ncontext of the template.\n\n\n\n\n\n"}, -{"name": "render_template_string", "args": ["source", "**context"], "description": "Renders a template from the given template source string\nwith the given context. Template variables will be autoescaped.\n\n\n\n\nParameters:\nsource \u2013 the source code of the template to be\nrendered\ncontext \u2013 the variables that should be available in the\ncontext of the template.\n\n\n\n\n\n"}, -{"name": "get_template_attribute", "args": ["template_name", "attribute"], "description": "Loads a macro (or variable) a template exports. This can be used to\ninvoke a macro from within Python code. If you for example have a\ntemplate named _cider.html with the following contents:\n{% macro hello(name) %}Hello {{ name }}!{% endmacro %}\n\n\nYou can access this from Python code like this:\nhello = get_template_attribute('_cider.html', 'hello')\nreturn hello('World')\n\n\n\nChangelog\nNew in version 0.2.\n\n\n\n\n\nParameters:\ntemplate_name \u2013 the name of the template\nattribute \u2013 the name of the variable of macro to access\n\n\n\n\n\n"}, -{"name": "stream_with_context", "args": ["generator_or_function"], "description": "Request contexts disappear when the response is started on the server.\nThis is done for efficiency reasons and to make it less likely to encounter\nmemory leaks with badly written WSGI middlewares. The downside is that if\nyou are using streamed responses, the generator cannot access request bound\ninformation any more.\nThis function however can help you keep the context around for longer:\nfrom flask import stream_with_context, request, Response\n\n@app.route('/stream')\ndef streamed_response():\n @stream_with_context\n def generate():\n yield 'Hello '\n yield request.args['name']\n yield '!'\n return Response(generate())\n\n\nAlternatively it can also be used around a specific generator:\nfrom flask import stream_with_context, request, Response\n\n@app.route('/stream')\ndef streamed_response():\n def generate():\n yield 'Hello '\n yield request.args['name']\n yield '!'\n return Response(stream_with_context(generate()))\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "load_dotenv", "args": ["path=None"], "description": "Load \u201cdotenv\u201d files in order of precedence to set environment variables.\nIf an env var is already set it is not overwritten, so earlier files in the\nlist are preferred over later files.\nChanges the current working directory to the location of the first file\nfound, with the assumption that it is in the top level project directory\nand will be where the Python path should import local packages from.\nThis is a no-op if python-dotenv is not installed.\n\n\n\n\nParameters:path \u2013 Load the file at this location instead of searching.\n\nReturns:True if a file was loaded.\n\n\n\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "with_appcontext", "args": ["f"], "description": "Wraps a callback so that it\u2019s guaranteed to be executed with the\nscript\u2019s application context. If callbacks are registered directly\nto the app.cli object then they are wrapped with this function\nby default unless it\u2019s disabled.\n"}, -{"name": "pass_script_info", "args": ["f"], "description": "Marks a function so that an instance of ScriptInfo is passed\nas first argument to the click callback.\n"}, -{"name": "Flask", "args": ["import_name", "static_url_path=None", "static_folder='static'", "static_host=None", "host_matching=False", "subdomain_matching=False", "template_folder='templates'", "instance_path=None", "instance_relative_config=False", "root_path=None"], "description": "The flask object implements a WSGI application and acts as the central\nobject. It is passed the name of the module or package of the\napplication. Once it is created it will act as a central registry for\nthe view functions, the URL rules, template configuration and much more.\n\nThe name of the package is used to resolve resources from inside the\npackage or the folder the module is contained in depending on if the\npackage parameter resolves to an actual python package (a folder with\nan __init__.py file inside) or a standard module (just a .py file).\n\nFor more information about resource loading, see open_resource().\n\nUsually you create a Flask instance in your main module or\nin the __init__.py file of your package like this:\n\n\nParameters:\nimport_name \u2013 the name of the application package\nstatic_url_path \u2013 can be used to specify a different path for the\nstatic files on the web. Defaults to the name\nof the static_folder folder.\nstatic_folder \u2013 the folder with static files that should be served\nat static_url_path. Defaults to the 'static'\nfolder in the root path of the application.\nstatic_host \u2013 the host to use when adding the static route.\nDefaults to None. Required when using host_matching=True\nwith a static_folder configured.\nhost_matching \u2013 set url_map.host_matching attribute.\nDefaults to False.\nsubdomain_matching \u2013 consider the subdomain relative to\nSERVER_NAME when matching routes. Defaults to False.\ntemplate_folder \u2013 the folder that contains the templates that should\nbe used by the application. Defaults to\n'templates' folder in the root path of the\napplication.\ninstance_path \u2013 An alternative instance path for the application.\nBy default the folder 'instance' next to the\npackage or module is assumed to be the instance\npath.\ninstance_relative_config \u2013 if set to True relative filenames\nfor loading the config are assumed to\nbe relative to the instance path instead\nof the application root.\nroot_path \u2013 Flask by default will automatically calculate the path\nto the root of the application. In certain situations\nthis cannot be achieved (for instance if the package\nis a Python 3 namespace package) and needs to be\nmanually defined."}, -{"name": "Flask.add_template_filter", "args": ["f", "name=None"], "description": "Register a custom template filter. Works exactly like the\ntemplate_filter() decorator.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_template_global", "args": ["f", "name=None"], "description": "Register a custom template global function. Works exactly like the\ntemplate_global() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global function, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_template_test", "args": ["f", "name=None"], "description": "Register a custom template test. Works exactly like the\ntemplate_test() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "provide_automatic_options=None", "**options"], "description": "Connects a URL rule. Works exactly like the route()\ndecorator. If a view_func is provided it will be registered with the\nendpoint.\nBasically this example:\n@app.route('/')\ndef index():\n pass\n\n\nIs equivalent to the following:\ndef index():\n pass\napp.add_url_rule('/', 'index', index)\n\n\nIf the view_func is not provided you will need to connect the endpoint\nto a view function like so:\napp.view_functions['index'] = index\n\n\nInternally route() invokes add_url_rule() so if you want\nto customize the behavior via subclassing you only need to change\nthis method.\nFor more information refer to URL Route Registrations.\n\nChangelog\nChanged in version 0.6: OPTIONS is added automatically as method.\n\n\nChanged in version 0.2: view_func parameter added.\n\n\n\n\n\nParameters:\nrule \u2013 the URL rule as string\nendpoint \u2013 the endpoint for the registered URL rule. Flask\nitself assumes the name of the view function as\nendpoint\nview_func \u2013 the function to call when serving a request to the\nprovided endpoint\nprovide_automatic_options \u2013 controls whether the OPTIONS\nmethod should be added automatically. This can also be controlled\nby setting the view_func.provide_automatic_options = False\nbefore adding the rule.\noptions \u2013 the options to be forwarded to the underlying\nRule object. A change\nto Werkzeug is handling of method options. methods\nis a list of methods this rule should be limited\nto (GET, POST etc.). By default a rule\njust listens for GET (and implicitly HEAD).\nStarting with Flask 0.6, OPTIONS is implicitly\nadded and handled by the standard request handling.\n\n\n\n\n\n"}, -{"name": "Flask.after_request", "args": ["f"], "description": "Register a function to be run after each request.\nYour function must take one parameter, an instance of\nresponse_class and return a new response object or the\nsame (see process_response()).\nAs of Flask 0.7 this function might not be executed at the end of the\nrequest in case an unhandled exception occurred.\n"}, -{"name": "Flask.app_context", "args": [], "description": "Create an AppContext. Use as a with\nblock to push the context, which will make current_app\npoint at this application.\nAn application context is automatically pushed by\nRequestContext.push()\nwhen handling a request, and when running a CLI command. Use\nthis to manually create a context outside of these situations.\nwith app.app_context():\n init_db()\n\n\nSee The Application Context.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.auto_find_instance_path", "args": [], "description": "Tries to locate the instance path if it was not provided to the\nconstructor of the application class. It will basically calculate\nthe path to a folder named instance next to your main file or\nthe package.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_first_request", "args": ["f"], "description": "Registers a function to be run before the first request to this\ninstance of the application.\nThe function will be called without any arguments and its return\nvalue is ignored.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_request", "args": ["f"], "description": "Registers a function to run before each request.\nFor example, this can be used to open a database connection, or to load\nthe logged in user from the session.\nThe function will be called without any arguments. If it returns a\nnon-None value, the value is handled as if it was the return value from\nthe view, and further request handling is stopped.\n"}, -{"name": "Flask.context_processor", "args": ["f"], "description": "Registers a template context processor function.\n"}, -{"name": "Flask.create_global_jinja_loader", "args": [], "description": "Creates the loader for the Jinja2 environment. Can be used to\noverride just the loader and keeping the rest unchanged. It\u2019s\ndiscouraged to override this function. Instead one should override\nthe jinja_loader() function instead.\nThe global loader dispatches between the loaders of the application\nand the individual blueprints.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.create_jinja_environment", "args": [], "description": "Creates the Jinja2 environment based on jinja_options\nand select_jinja_autoescape(). Since 0.7 this also adds\nthe Jinja2 globals and filters after initialization. Override\nthis function to customize the behavior.\n\nChangelog\nChanged in version 0.11: Environment.auto_reload set in accordance with\nTEMPLATES_AUTO_RELOAD configuration option.\n\n\nNew in version 0.5.\n\n"}, -{"name": "Flask.create_url_adapter", "args": ["request"], "description": "Creates a URL adapter for the given request. The URL adapter\nis created at a point where the request context is not yet set\nup so the request is passed explicitly.\n\nChanged in version 1.0: SERVER_NAME no longer implicitly enables subdomain\nmatching. Use subdomain_matching instead.\n\n\nChangelog\nChanged in version 0.9: This can now also be called without a request object when the\nURL adapter is created for the application context.\n\n\nNew in version 0.6.\n\n"}, -{"name": "Flask.dispatch_request", "args": [], "description": "Does the request dispatching. Matches the URL and returns the\nreturn value of the view or error handler. This does not have to\nbe a response object. In order to convert the return value to a\nproper response object, call make_response().\n\nChangelog\nChanged in version 0.7: This no longer does the exception handling, this code was\nmoved to the new full_dispatch_request().\n\n"}, -{"name": "Flask.do_teardown_appcontext", "args": ["exc=<object object>"], "description": "Called right before the application context is popped.\nWhen handling a request, the application context is popped\nafter the request context. See do_teardown_request().\nThis calls all functions decorated with\nteardown_appcontext(). Then the\nappcontext_tearing_down signal is sent.\nThis is called by\nAppContext.pop().\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.do_teardown_request", "args": ["exc=<object object>"], "description": "Called after the request is dispatched and the response is\nreturned, right before the request context is popped.\nThis calls all functions decorated with\nteardown_request(), and Blueprint.teardown_request()\nif a blueprint handled the request. Finally, the\nrequest_tearing_down signal is sent.\nThis is called by\nRequestContext.pop(),\nwhich may be delayed during testing to maintain access to\nresources.\n\n\n\n\nParameters:exc \u2013 An unhandled exception raised while dispatching the\nrequest. Detected from the current exception information if\nnot passed. Passed to each teardown function.\n\n\n\n\nChangelog\nChanged in version 0.9: Added the exc argument.\n\n"}, -{"name": "Flask.endpoint", "args": ["endpoint"], "description": "A decorator to register a function as an endpoint.\nExample:\n@app.endpoint('example.endpoint')\ndef example():\n return \"example\"\n\n\n\n\n\n\nParameters:endpoint \u2013 the name of the endpoint\n\n\n\n"}, -{"name": "Flask.errorhandler", "args": ["code_or_exception"], "description": "Register a function to handle errors by code or exception class.\nA decorator that is used to register a function given an\nerror code. Example:\n@app.errorhandler(404)\ndef page_not_found(error):\n return 'This page does not exist', 404\n\n\nYou can also register handlers for arbitrary exceptions:\n@app.errorhandler(DatabaseError)\ndef special_exception_handler(error):\n return 'Database connection failed', 500\n\n\n\nChangelog\nNew in version 0.7: Use register_error_handler() instead of modifying\nerror_handler_spec directly, for application wide error\nhandlers.\n\n\nNew in version 0.7: One can now additionally also register custom exception types\nthat do not necessarily have to be a subclass of the\nHTTPException class.\n\n\n\n\n\nParameters:code_or_exception \u2013 the code as integer for the handler, or\nan arbitrary exception\n\n\n\n"}, -{"name": "Flask.full_dispatch_request", "args": [], "description": "Dispatches the request and on top of that performs request\npre and postprocessing as well as HTTP exception catching and\nerror handling.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.get_send_file_max_age", "args": ["filename"], "description": "Provides default cache_timeout for the send_file() functions.\nBy default, this function returns SEND_FILE_MAX_AGE_DEFAULT from\nthe configuration of current_app.\nStatic file functions such as send_from_directory() use this\nfunction, and send_file() calls this function on\ncurrent_app when the given cache_timeout is None. If a\ncache_timeout is given in send_file(), that timeout is used;\notherwise, this method is called.\nThis allows subclasses to change the behavior when sending files based\non the filename. For example, to set the cache timeout for .js files\nto 60 seconds:\nclass MyFlask(flask.Flask):\n def get_send_file_max_age(self, name):\n if name.lower().endswith('.js'):\n return 60\n return flask.Flask.get_send_file_max_age(self, name)\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.handle_exception", "args": ["e"], "description": "Default exception handling that kicks in when an exception\noccurs that is not caught. In debug mode the exception will\nbe re-raised immediately, otherwise it is logged and the handler\nfor a 500 internal server error is used. If no such handler\nexists, a default 500 internal server error message is displayed.\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.handle_http_exception", "args": ["e"], "description": "Handles an HTTP exception. By default this will invoke the\nregistered error handlers and fall back to returning the\nexception as response.\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.handle_url_build_error", "args": ["error", "endpoint", "values"], "description": "Handle BuildError on url_for().\n"}, -{"name": "Flask.handle_user_exception", "args": ["e"], "description": "This method is called whenever an exception occurs that should be\nhandled. A special case are\nHTTPExceptions which are forwarded by\nthis function to the handle_http_exception() method. This\nfunction will either return a response value or reraise the\nexception with the same traceback.\n\nChanged in version 1.0: Key errors raised from request data like form show the the bad\nkey in debug mode rather than a generic bad request message.\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.inject_url_defaults", "args": ["endpoint", "values"], "description": "Injects the URL defaults for the given endpoint directly into\nthe values dictionary passed. This is used internally and\nautomatically called on URL building.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.iter_blueprints", "args": [], "description": "Iterates over all blueprints by the order they were registered.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.log_exception", "args": ["exc_info"], "description": "Logs an exception. This is called by handle_exception()\nif debugging is disabled and right before the handler is called.\nThe default implementation logs the exception as error on the\nlogger.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.make_config", "args": ["instance_relative=False"], "description": "Used to create the config attribute by the Flask constructor.\nThe instance_relative parameter is passed in from the constructor\nof Flask (there named instance_relative_config) and indicates if\nthe config should be relative to the instance path or the root path\nof the application.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.make_default_options_response", "args": [], "description": "This method is called to create the default OPTIONS response.\nThis can be changed through subclassing to change the default\nbehavior of OPTIONS responses.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.make_null_session", "args": [], "description": "Creates a new instance of a missing session. Instead of overriding\nthis method we recommend replacing the session_interface.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.make_response", "args": ["rv"], "description": "Convert the return value from a view function to an instance of\nresponse_class.\n\n\n\n\nParameters:rv \u2013 the return value from the view function. The view function\nmust return a response. Returning None, or the view ending\nwithout returning, is not allowed. The following types are allowed\nfor view_rv:\n\nstr (unicode in Python 2)\nA response object is created with the string encoded to UTF-8\nas the body.\nbytes (str in Python 2)\nA response object is created with the bytes as the body.\ntuple\nEither (body, status, headers), (body, status), or\n(body, headers), where body is any of the other types\nallowed here, status is a string or an integer, and\nheaders is a dictionary or a list of (key, value)\ntuples. If body is a response_class instance,\nstatus overwrites the exiting value and headers are\nextended.\nresponse_class\nThe object is returned unchanged.\nother Response class\nThe object is coerced to response_class.\ncallable()\nThe function is called as a WSGI application. The result is\nused to create a response object.\n\n\n\n\n\n\nChangelog\nChanged in version 0.9: Previously a tuple was interpreted as the arguments for the\nresponse object.\n\n"}, -{"name": "Flask.make_shell_context", "args": [], "description": "Returns the shell context for an interactive shell for this\napplication. This runs all the registered shell context\nprocessors.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.open_instance_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s instance folder\n(instance_path). Otherwise works like\nopen_resource(). Instance resources can also be opened for\nwriting.\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Flask.open_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s resource folder. To see\nhow this works, consider the following folder structure:\n/myapplication.py\n/schema.sql\n/static\n /style.css\n/templates\n /layout.html\n /index.html\n\n\nIf you want to open the schema.sql file you would do the\nfollowing:\nwith app.open_resource('schema.sql') as f:\n contents = f.read()\n do_something_with(contents)\n\n\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Flask.open_session", "args": ["request"], "description": "Creates or opens a new session. Default implementation stores all\nsession data in a signed cookie. This requires that the\nsecret_key is set. Instead of overriding this method\nwe recommend replacing the session_interface.\n\n\n\n\nParameters:request \u2013 an instance of request_class.\n\n\n\n"}, -{"name": "Flask.preprocess_request", "args": [], "description": "Called before the request is dispatched. Calls\nurl_value_preprocessors registered with the app and the\ncurrent blueprint (if any). Then calls before_request_funcs\nregistered with the app and the blueprint.\nIf any before_request() handler returns a non-None value, the\nvalue is handled as if it was the return value from the view, and\nfurther request handling is stopped.\n"}, -{"name": "Flask.process_response", "args": ["response"], "description": "Can be overridden in order to modify the response object\nbefore it\u2019s sent to the WSGI server. By default this will\ncall all the after_request() decorated functions.\n\nChangelog\nChanged in version 0.5: As of Flask 0.5 the functions registered for after request\nexecution are called in reverse order of registration.\n\n\n\n\n\nParameters:response \u2013 a response_class object.\n\nReturns:a new response object or the same, has to be an\ninstance of response_class.\n\n\n\n"}, -{"name": "Flask.register_blueprint", "args": ["blueprint", "**options"], "description": "Register a Blueprint on the application. Keyword\narguments passed to this method will override the defaults set on the\nblueprint.\nCalls the blueprint\u2019s register() method after\nrecording the blueprint in the application\u2019s blueprints.\n\n\n\n\nParameters:\nblueprint \u2013 The blueprint to register.\nurl_prefix \u2013 Blueprint routes will be prefixed with this.\nsubdomain \u2013 Blueprint routes will match on this subdomain.\nurl_defaults \u2013 Blueprint routes will use these default values for\nview arguments.\noptions \u2013 Additional keyword arguments are passed to\nBlueprintSetupState. They can be\naccessed in record() callbacks.\n\n\n\n\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.register_error_handler", "args": ["code_or_exception", "f"], "description": "Alternative error attach function to the errorhandler()\ndecorator that is more straightforward to use for non decorator\nusage.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.request_context", "args": ["environ"], "description": "Create a RequestContext representing a\nWSGI environment. Use a with block to push the context,\nwhich will make request point at this request.\nSee The Request Context.\nTypically you should not call this from your own code. A request\ncontext is automatically pushed by the wsgi_app() when\nhandling a request. Use test_request_context() to create\nan environment and context instead of this method.\n\n\n\n\nParameters:environ \u2013 a WSGI environment\n\n\n\n"}, -{"name": "Flask.route", "args": ["rule", "**options"], "description": "A decorator that is used to register a view function for a\ngiven URL rule. This does the same thing as add_url_rule()\nbut is intended for decorator usage:\n@app.route('/')\ndef index():\n return 'Hello World'\n\n\nFor more information refer to URL Route Registrations.\n\n\n\n\nParameters:\nrule \u2013 the URL rule as string\nendpoint \u2013 the endpoint for the registered URL rule. Flask\nitself assumes the name of the view function as\nendpoint\noptions \u2013 the options to be forwarded to the underlying\nRule object. A change\nto Werkzeug is handling of method options. methods\nis a list of methods this rule should be limited\nto (GET, POST etc.). By default a rule\njust listens for GET (and implicitly HEAD).\nStarting with Flask 0.6, OPTIONS is implicitly\nadded and handled by the standard request handling.\n\n\n\n\n\n"}, -{"name": "Flask.run", "args": ["host=None", "port=None", "debug=None", "load_dotenv=True", "**options"], "description": "Runs the application on a local development server.\nDo not use run() in a production setting. It is not intended to\nmeet security and performance requirements for a production server.\nInstead, see Deployment Options for WSGI server recommendations.\nIf the debug flag is set the server will automatically reload\nfor code changes and show a debugger in case an exception happened.\nIf you want to run the application in debug mode, but disable the\ncode execution on the interactive debugger, you can pass\nuse_evalex=False as parameter. This will keep the debugger\u2019s\ntraceback screen active, but disable code execution.\nIt is not recommended to use this function for development with\nautomatic reloading as this is badly supported. Instead you should\nbe using the flask command line script\u2019s run support.\n\nKeep in Mind\nFlask will suppress any server error with a generic error page\nunless it is in debug mode. As such to enable just the\ninteractive debugger without the code reloading, you have to\ninvoke run() with debug=True and use_reloader=False.\nSetting use_debugger to True without being in debug mode\nwon\u2019t catch any exceptions because there won\u2019t be any to\ncatch.\n\n\n\n\n\nParameters:\nhost \u2013 the hostname to listen on. Set this to '0.0.0.0' to\nhave the server available externally as well. Defaults to\n'127.0.0.1' or the host in the SERVER_NAME config variable\nif present.\nport \u2013 the port of the webserver. Defaults to 5000 or the\nport defined in the SERVER_NAME config variable if present.\ndebug \u2013 if given, enable or disable debug mode. See\ndebug.\nload_dotenv \u2013 Load the nearest .env and .flaskenv\nfiles to set environment variables. Will also change the working\ndirectory to the directory containing the first file found.\noptions \u2013 the options to be forwarded to the underlying Werkzeug\nserver. See werkzeug.serving.run_simple() for more\ninformation.\n\n\n\n\n\n\nChanged in version 1.0: If installed, python-dotenv will be used to load environment\nvariables from .env and .flaskenv files.\nIf set, the FLASK_ENV and FLASK_DEBUG\nenvironment variables will override env and\ndebug.\nThreaded mode is enabled by default.\n\n\nChangelog\nChanged in version 0.10: The default port is now picked from the SERVER_NAME\nvariable.\n\n"}, -{"name": "Flask.save_session", "args": ["session", "response"], "description": "Saves the session if it needs updates. For the default\nimplementation, check open_session(). Instead of overriding this\nmethod we recommend replacing the session_interface.\n\n\n\n\nParameters:\nsession \u2013 the session to be saved (a\nSecureCookie\nobject)\nresponse \u2013 an instance of response_class\n\n\n\n\n\n"}, -{"name": "Flask.select_jinja_autoescape", "args": ["filename"], "description": "Returns True if autoescaping should be active for the given\ntemplate name. If no template name is given, returns True.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.send_static_file", "args": ["filename"], "description": "Function used internally to send static files from the static\nfolder to the browser.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.shell_context_processor", "args": ["f"], "description": "Registers a shell context processor function.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.should_ignore_error", "args": ["error"], "description": "This is called to figure out if an error should be ignored\nor not as far as the teardown system is concerned. If this\nfunction returns True then the teardown handlers will not be\npassed the error.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "Flask.teardown_appcontext", "args": ["f"], "description": "Registers a function to be called when the application context\nends. These functions are typically also called when the request\ncontext is popped.\nExample:\nctx = app.app_context()\nctx.push()\n...\nctx.pop()\n\n\nWhen ctx.pop() is executed in the above example, the teardown\nfunctions are called just before the app context moves from the\nstack of active contexts. This becomes relevant if you are using\nsuch constructs in tests.\nSince a request context typically also manages an application\ncontext it would also be called when you pop a request context.\nWhen a teardown function was called because of an unhandled exception\nit will be passed an error object. If an errorhandler() is\nregistered, it will handle the exception and the teardown will not\nreceive it.\nThe return values of teardown functions are ignored.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.teardown_request", "args": ["f"], "description": "Register a function to be run at the end of each request,\nregardless of whether there was an exception or not. These functions\nare executed when the request context is popped, even if not an\nactual request was performed.\nExample:\nctx = app.test_request_context()\nctx.push()\n...\nctx.pop()\n\n\nWhen ctx.pop() is executed in the above example, the teardown\nfunctions are called just before the request context moves from the\nstack of active contexts. This becomes relevant if you are using\nsuch constructs in tests.\nGenerally teardown functions must take every necessary step to avoid\nthat they will fail. If they do execute code that might fail they\nwill have to surround the execution of these code by try/except\nstatements and log occurring errors.\nWhen a teardown function was called because of an exception it will\nbe passed an error object.\nThe return values of teardown functions are ignored.\n\nDebug Note\nIn debug mode Flask will not tear down a request on an exception\nimmediately. Instead it will keep it alive so that the interactive\ndebugger can still access it. This behavior can be controlled\nby the PRESERVE_CONTEXT_ON_EXCEPTION configuration variable.\n\n"}, -{"name": "Flask.template_filter", "args": ["name=None"], "description": "A decorator that is used to register custom template filter.\nYou can specify a name for the filter, otherwise the function\nname will be used. Example:\n@app.template_filter()\ndef reverse(s):\n return s[::-1]\n\n\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.template_global", "args": ["name=None"], "description": "A decorator that is used to register a custom template global function.\nYou can specify a name for the global function, otherwise the function\nname will be used. Example:\n@app.template_global()\ndef double(n):\n return 2 * n\n\n\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global function, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.template_test", "args": ["name=None"], "description": "A decorator that is used to register custom template test.\nYou can specify a name for the test, otherwise the function\nname will be used. Example:\n@app.template_test()\ndef is_prime(n):\n if n == 2:\n return True\n for i in range(2, int(math.ceil(math.sqrt(n))) + 1):\n if n % i == 0:\n return False\n return True\n\n\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.test_cli_runner", "args": ["**kwargs"], "description": "Create a CLI runner for testing CLI commands.\nSee Testing CLI Commands.\nReturns an instance of test_cli_runner_class, by default\nFlaskCliRunner. The Flask app object is\npassed as the first argument.\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "Flask.test_client", "args": ["use_cookies=True", "**kwargs"], "description": "Creates a test client for this application. For information\nabout unit testing head over to Testing Flask Applications.\nNote that if you are testing for assertions or exceptions in your\napplication code, you must set app.testing = True in order for the\nexceptions to propagate to the test client. Otherwise, the exception\nwill be handled by the application (not visible to the test client) and\nthe only indication of an AssertionError or other exception will be a\n500 status code response to the test client. See the testing\nattribute. For example:\napp.testing = True\nclient = app.test_client()\n\n\nThe test client can be used in a with block to defer the closing down\nof the context until the end of the with block. This is useful if\nyou want to access the context locals for testing:\nwith app.test_client() as c:\n rv = c.get('/?vodka=42')\n assert request.args['vodka'] == '42'\n\n\nAdditionally, you may pass optional keyword arguments that will then\nbe passed to the application\u2019s test_client_class constructor.\nFor example:\nfrom flask.testing import FlaskClient\n\nclass CustomClient(FlaskClient):\n def __init__(self, *args, **kwargs):\n self._authentication = kwargs.pop(\"authentication\")\n super(CustomClient,self).__init__( *args, **kwargs)\n\napp.test_client_class = CustomClient\nclient = app.test_client(authentication='Basic ....')\n\n\nSee FlaskClient for more information.\n\nChangelog\nChanged in version 0.11: Added **kwargs to support passing additional keyword arguments to\nthe constructor of test_client_class.\n\n\nNew in version 0.7: The use_cookies parameter was added as well as the ability\nto override the client to be used by setting the\ntest_client_class attribute.\n\n\nChanged in version 0.4: added support for with block usage for the client.\n\n"}, -{"name": "Flask.test_request_context", "args": ["*args", "**kwargs"], "description": "Create a RequestContext for a WSGI\nenvironment created from the given values. This is mostly useful\nduring testing, where you may want to run a function that uses\nrequest data without dispatching a full request.\nSee The Request Context.\nUse a with block to push the context, which will make\nrequest point at the request for the created\nenvironment.\nwith test_request_context(...):\n generate_report()\n\n\nWhen using the shell, it may be easier to push and pop the\ncontext manually to avoid indentation.\nctx = app.test_request_context(...)\nctx.push()\n...\nctx.pop()\n\n\nTakes the same arguments as Werkzeug\u2019s\nEnvironBuilder, with some defaults from\nthe application. See the linked Werkzeug docs for most of the\navailable arguments. Flask-specific behavior is listed here.\n\n\n\n\nParameters:\npath \u2013 URL path being requested.\nbase_url \u2013 Base URL where the app is being served, which\npath is relative to. If not given, built from\nPREFERRED_URL_SCHEME, subdomain,\nSERVER_NAME, and APPLICATION_ROOT.\nsubdomain \u2013 Subdomain name to append to\nSERVER_NAME.\nurl_scheme \u2013 Scheme to use instead of\nPREFERRED_URL_SCHEME.\ndata \u2013 The request body, either as a string or a dict of\nform keys and values.\njson \u2013 If given, this is serialized as JSON and passed as\ndata. Also defaults content_type to\napplication/json.\nargs \u2013 other positional arguments passed to\nEnvironBuilder.\nkwargs \u2013 other keyword arguments passed to\nEnvironBuilder.\n\n\n\n\n\n"}, -{"name": "Flask.trap_http_exception", "args": ["e"], "description": "Checks if an HTTP exception should be trapped or not. By default\nthis will return False for all exceptions except for a bad request\nkey error if TRAP_BAD_REQUEST_ERRORS is set to True. It\nalso returns True if TRAP_HTTP_EXCEPTIONS is set to True.\nThis is called for all HTTP exceptions raised by a view function.\nIf it returns True for any exception the error handler for this\nexception is not called and it shows up as regular exception in the\ntraceback. This is helpful for debugging implicitly raised HTTP\nexceptions.\n\nChanged in version 1.0: Bad request errors are not trapped by default in debug mode.\n\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.update_template_context", "args": ["context"], "description": "Update the template context with some commonly used variables.\nThis injects request, session, config and g into the template\ncontext as well as everything template context processors want\nto inject. Note that the as of Flask 0.6, the original values\nin the context will not be overridden if a context processor\ndecides to return a value with the same key.\n\n\n\n\nParameters:context \u2013 the context as a dictionary that is updated in place\nto add extra variables.\n\n\n\n"}, -{"name": "Flask.url_defaults", "args": ["f"], "description": "Callback function for URL defaults for all view functions of the\napplication. It\u2019s called with the endpoint and values and should\nupdate the values passed in place.\n"}, -{"name": "Flask.url_value_preprocessor", "args": ["f"], "description": "Register a URL value preprocessor function for all view\nfunctions in the application. These functions will be called before the\nbefore_request() functions.\nThe function can modify the values captured from the matched url before\nthey are passed to the view. For example, this can be used to pop a\ncommon language code value and place it in g rather than pass it to\nevery view.\nThe function is passed the endpoint name and values dict. The return\nvalue is ignored.\n"}, -{"name": "Flask.wsgi_app", "args": ["environ", "start_response"], "description": "The actual WSGI application. This is not implemented in\n__call__() so that middlewares can be applied without\nlosing a reference to the app object. Instead of doing this:\napp = MyMiddleware(app)\n\n\nIt\u2019s a better idea to do this instead:\napp.wsgi_app = MyMiddleware(app.wsgi_app)\n\n\nThen you still have the original application object around and\ncan continue to call methods on it.\n\nChangelog\nChanged in version 0.7: Teardown events for the request and app contexts are called\neven if an unhandled error occurs. Other events may not be\ncalled depending on when an error occurs during dispatch.\nSee Callbacks and Errors.\n\n\n\n\n\nParameters:\nenviron \u2013 A WSGI environment.\nstart_response \u2013 A callable accepting a status code,\na list of headers, and an optional exception context to\nstart the response.\n\n\n\n\n\n"}, -{"name": "Flask.after_request_funcs", "args": null, "description": "A dictionary with lists of functions that should be called after\neach request. The key of the dictionary is the name of the blueprint\nthis function is active for, None for all requests. This can for\nexample be used to close database connections. To register a function\nhere, use the after_request() decorator.\n"}, -{"name": "Flask.app_ctx_globals_class", "args": null, "description": "alias of flask.ctx._AppCtxGlobals\n"}, -{"name": "Flask.before_first_request_funcs", "args": null, "description": "A list of functions that will be called at the beginning of the\nfirst request to this instance. To register a function, use the\nbefore_first_request() decorator.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_request_funcs", "args": null, "description": "A dictionary with lists of functions that will be called at the\nbeginning of each request. The key of the dictionary is the name of\nthe blueprint this function is active for, or None for all\nrequests. To register a function, use the before_request()\ndecorator.\n"}, -{"name": "Flask.blueprints", "args": null, "description": "all the attached blueprints in a dictionary by name. Blueprints\ncan be attached multiple times so this dictionary does not tell\nyou how often they got attached.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.cli", "args": null, "description": "The click command line context for this application. Commands\nregistered here show up in the flask command once the\napplication has been discovered. The default commands are\nprovided by Flask itself and can be overridden.\nThis is an instance of a click.Group object.\n"}, -{"name": "Flask.config", "args": null, "description": "The configuration dictionary as Config. This behaves\nexactly like a regular dictionary but supports additional methods\nto load a config from files.\n"}, -{"name": "Flask.config_class", "args": null, "description": "alias of flask.config.Config\n"}, -{"name": "Flask.debug", "args": null, "description": "Whether debug mode is enabled. When using flask run to start\nthe development server, an interactive debugger will be shown for\nunhandled exceptions, and the server will be reloaded when code\nchanges. This maps to the DEBUG config key. This is\nenabled when env is 'development' and is overridden\nby the FLASK_DEBUG environment variable. It may not behave as\nexpected if set in code.\nDo not enable debug mode when deploying in production.\nDefault: True if env is 'development', or\nFalse otherwise.\n"}, -{"name": "Flask.default_config", "args": null, "description": "Default configuration parameters.\n"}, -{"name": "Flask.env", "args": null, "description": "What environment the app is running in. Flask and extensions may\nenable behaviors based on the environment, such as enabling debug\nmode. This maps to the ENV config key. This is set by the\nFLASK_ENV environment variable and may not behave as\nexpected if set in code.\nDo not enable development when deploying in production.\nDefault: 'production'\n"}, -{"name": "Flask.error_handler_spec", "args": null, "description": "A dictionary of all registered error handlers. The key is None\nfor error handlers active on the application, otherwise the key is\nthe name of the blueprint. Each key points to another dictionary\nwhere the key is the status code of the http exception. The\nspecial key None points to a list of tuples where the first item\nis the class for the instance check and the second the error handler\nfunction.\nTo register an error handler, use the errorhandler()\ndecorator.\n"}, -{"name": "Flask.extensions", "args": null, "description": "a place where extensions can store application specific state. For\nexample this is where an extension could store database engines and\nsimilar things. For backwards compatibility extensions should register\nthemselves like this:\nif not hasattr(app, 'extensions'):\n app.extensions = {}\napp.extensions['extensionname'] = SomeObject()\n\n\nThe key must match the name of the extension module. For example in\ncase of a \u201cFlask-Foo\u201d extension in flask_foo, the key would be\n'foo'.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.got_first_request", "args": null, "description": "This attribute is set to True if the application started\nhandling the first request.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.has_static_folder", "args": null, "description": "This is True if the package bound object\u2019s container has a\nfolder for static files.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.import_name", "args": null, "description": "The name of the package or module that this app belongs to. Do not\nchange this once it is set by the constructor.\n"}, -{"name": "Flask.instance_path", "args": null, "description": "Holds the path to the instance folder.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.jinja_env", "args": null, "description": "The Jinja2 environment used to load templates.\n"}, -{"name": "Flask.jinja_environment", "args": null, "description": "alias of flask.templating.Environment\n"}, -{"name": "Flask.jinja_loader", "args": null, "description": "The Jinja loader for this package bound object.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.jinja_options", "args": null, "description": "Options that are passed directly to the Jinja2 environment.\n"}, -{"name": "Flask.json_decoder", "args": null, "description": "alias of flask.json.JSONDecoder\n"}, -{"name": "Flask.json_encoder", "args": null, "description": "alias of flask.json.JSONEncoder\n"}, -{"name": "Flask.logger", "args": null, "description": "The 'flask.app' logger, a standard Python\nLogger.\nIn debug mode, the logger\u2019s level will be set\nto DEBUG.\nIf there are no handlers configured, a default handler will be added.\nSee Logging for more information.\n\nChanged in version 1.0: Behavior was simplified. The logger is always named\nflask.app. The level is only set during configuration, it\ndoesn\u2019t check app.debug each time. Only one format is used,\nnot different ones depending on app.debug. No handlers are\nremoved, and a handler is only added if no handlers are already\nconfigured.\n\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.name", "args": null, "description": "The name of the application. This is usually the import name\nwith the difference that it\u2019s guessed from the run file if the\nimport name is main. This name is used as a display name when\nFlask needs the name of the application. It can be set and overridden\nto change the value.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.permanent_session_lifetime", "args": null, "description": "A timedelta which is used to set the expiration\ndate of a permanent session. The default is 31 days which makes a\npermanent session survive for roughly one month.\nThis attribute can also be configured from the config with the\nPERMANENT_SESSION_LIFETIME configuration key. Defaults to\ntimedelta(days=31)\n"}, -{"name": "Flask.preserve_context_on_exception", "args": null, "description": "Returns the value of the PRESERVE_CONTEXT_ON_EXCEPTION\nconfiguration value in case it\u2019s set, otherwise a sensible default\nis returned.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.propagate_exceptions", "args": null, "description": "Returns the value of the PROPAGATE_EXCEPTIONS configuration\nvalue in case it\u2019s set, otherwise a sensible default is returned.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.request_class", "args": null, "description": "alias of flask.wrappers.Request\n"}, -{"name": "Flask.response_class", "args": null, "description": "alias of flask.wrappers.Response\n"}, -{"name": "Flask.root_path", "args": null, "description": "Absolute path to the package on the filesystem. Used to look up\nresources contained in the package.\n"}, -{"name": "Flask.secret_key", "args": null, "description": "If a secret key is set, cryptographic components can use this to\nsign cookies and other things. Set this to a complex random value\nwhen you want to use the secure cookie for instance.\nThis attribute can also be configured from the config with the\nSECRET_KEY configuration key. Defaults to None.\n"}, -{"name": "Flask.send_file_max_age_default", "args": null, "description": "A timedelta which is used as default cache_timeout\nfor the send_file() functions. The default is 12 hours.\nThis attribute can also be configured from the config with the\nSEND_FILE_MAX_AGE_DEFAULT configuration key. This configuration\nvariable can also be set with an integer value used as seconds.\nDefaults to timedelta(hours=12)\n"}, -{"name": "Flask.session_cookie_name", "args": null, "description": "The secure cookie uses this for the name of the session cookie.\nThis attribute can also be configured from the config with the\nSESSION_COOKIE_NAME configuration key. Defaults to 'session'\n"}, -{"name": "Flask.session_interface", "args": null, "description": "the session interface to use. By default an instance of\nSecureCookieSessionInterface is used here.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.shell_context_processors", "args": null, "description": "A list of shell context processor functions that should be run\nwhen a shell context is created.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.static_folder", "args": null, "description": "The absolute path to the configured static folder.\n"}, -{"name": "Flask.static_url_path", "args": null, "description": "The URL prefix that the static route will be registered for.\n"}, -{"name": "Flask.teardown_appcontext_funcs", "args": null, "description": "A list of functions that are called when the application context\nis destroyed. Since the application context is also torn down\nif the request ends this is the place to store code that disconnects\nfrom databases.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.teardown_request_funcs", "args": null, "description": "A dictionary with lists of functions that are called after\neach request, even if an exception has occurred. The key of the\ndictionary is the name of the blueprint this function is active for,\nNone for all requests. These functions are not allowed to modify\nthe request, and their return values are ignored. If an exception\noccurred while processing the request, it gets passed to each\nteardown_request function. To register a function here, use the\nteardown_request() decorator.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.template_context_processors", "args": null, "description": "A dictionary with list of functions that are called without argument\nto populate the template context. The key of the dictionary is the\nname of the blueprint this function is active for, None for all\nrequests. Each returns a dictionary that the template context is\nupdated with. To register a function here, use the\ncontext_processor() decorator.\n"}, -{"name": "Flask.template_folder", "args": null, "description": "Location of the template files to be added to the template lookup.\nNone if templates should not be added.\n"}, -{"name": "Flask.templates_auto_reload", "args": null, "description": "Reload templates when they are changed. Used by\ncreate_jinja_environment().\nThis attribute can be configured with TEMPLATES_AUTO_RELOAD. If\nnot set, it will be enabled in debug mode.\n\nNew in version 1.0: This property was added but the underlying config and behavior\nalready existed.\n\n\nChangelog"}, -{"name": "Flask.test_cli_runner_class", "args": null, "description": "The CliRunner subclass, by default\nFlaskCliRunner that is used by\ntest_cli_runner(). Its __init__ method should take a\nFlask app object as the first argument.\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "Flask.test_client_class", "args": null, "description": "the test client that is used with when test_client is used.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.testing", "args": null, "description": "The testing flag. Set this to True to enable the test mode of\nFlask extensions (and in the future probably also Flask itself).\nFor example this might activate test helpers that have an\nadditional runtime cost which should not be enabled by default.\nIf this is enabled and PROPAGATE_EXCEPTIONS is not changed from the\ndefault it\u2019s implicitly enabled.\nThis attribute can also be configured from the config with the\nTESTING configuration key. Defaults to False.\n"}, -{"name": "Flask.url_build_error_handlers", "args": null, "description": "A list of functions that are called when url_for() raises a\nBuildError. Each function registered here\nis called with error, endpoint and values. If a function\nreturns None or raises a BuildError the next function is\ntried.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.url_default_functions", "args": null, "description": "A dictionary with lists of functions that can be used as URL value\npreprocessors. The key None here is used for application wide\ncallbacks, otherwise the key is the name of the blueprint.\nEach of these functions has the chance to modify the dictionary\nof URL values before they are used as the keyword arguments of the\nview function. For each function registered this one should also\nprovide a url_defaults() function that adds the parameters\nautomatically again that were removed that way.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.url_map", "args": null, "description": "The Map for this instance. You can use\nthis to change the routing converters after the class was created\nbut before any routes are connected. Example:\nfrom werkzeug.routing import BaseConverter\n\nclass ListConverter(BaseConverter):\n def to_python(self, value):\n return value.split(',')\n def to_url(self, values):\n return ','.join(super(ListConverter, self).to_url(value)\n for value in values)\n\napp = Flask(__name__)\napp.url_map.converters['list'] = ListConverter\n\n\n"}, -{"name": "Flask.url_rule_class", "args": null, "description": "alias of werkzeug.routing.Rule\n"}, -{"name": "Flask.url_value_preprocessors", "args": null, "description": "A dictionary with lists of functions that are called before the\nbefore_request_funcs functions. The key of the dictionary is\nthe name of the blueprint this function is active for, or None\nfor all requests. To register a function, use\nurl_value_preprocessor().\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.use_x_sendfile", "args": null, "description": "Enable this if you want to use the X-Sendfile feature. Keep in\nmind that the server has to support this. This only affects files\nsent with the send_file() method.\n\nChangelog\nNew in version 0.2.\n\nThis attribute can also be configured from the config with the\nUSE_X_SENDFILE configuration key. Defaults to False.\n"}, -{"name": "Flask.view_functions", "args": null, "description": "A dictionary of all view functions registered. The keys will\nbe function names which are also used to generate URLs and\nthe values are the function objects themselves.\nTo register a view function, use the route() decorator.\n"}, -{"name": "Blueprint", "args": ["name", "import_name", "static_folder=None", "static_url_path=None", "template_folder=None", "url_prefix=None", "subdomain=None", "url_defaults=None", "root_path=None"], "description": "Represents a blueprint. A blueprint is an object that records\nfunctions that will be called with the\nBlueprintSetupState later to register functions\nor other things on the main application. See Modular Applications with Blueprints for more\ninformation.\n\n"}, -{"name": "Blueprint.add_app_template_filter", "args": ["f", "name=None"], "description": "Register a custom template filter, available application wide. Like\nFlask.add_template_filter() but for a blueprint. Works exactly\nlike the app_template_filter() decorator.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_app_template_global", "args": ["f", "name=None"], "description": "Register a custom template global, available application wide. Like\nFlask.add_template_global() but for a blueprint. Works exactly\nlike the app_template_global() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_app_template_test", "args": ["f", "name=None"], "description": "Register a custom template test, available application wide. Like\nFlask.add_template_test() but for a blueprint. Works exactly\nlike the app_template_test() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "**options"], "description": "Like Flask.add_url_rule() but for a blueprint. The endpoint for\nthe url_for() function is prefixed with the name of the blueprint.\n"}, -{"name": "Blueprint.after_app_request", "args": ["f"], "description": "Like Flask.after_request() but for a blueprint. Such a function\nis executed after each request, even if outside of the blueprint.\n"}, -{"name": "Blueprint.after_request", "args": ["f"], "description": "Like Flask.after_request() but for a blueprint. This function\nis only executed after each request that is handled by a function of\nthat blueprint.\n"}, -{"name": "Blueprint.app_context_processor", "args": ["f"], "description": "Like Flask.context_processor() but for a blueprint. Such a\nfunction is executed each request, even if outside of the blueprint.\n"}, -{"name": "Blueprint.app_errorhandler", "args": ["code"], "description": "Like Flask.errorhandler() but for a blueprint. This\nhandler is used for all requests, even if outside of the blueprint.\n"}, -{"name": "Blueprint.app_template_filter", "args": ["name=None"], "description": "Register a custom template filter, available application wide. Like\nFlask.template_filter() but for a blueprint.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_template_global", "args": ["name=None"], "description": "Register a custom template global, available application wide. Like\nFlask.template_global() but for a blueprint.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_template_test", "args": ["name=None"], "description": "Register a custom template test, available application wide. Like\nFlask.template_test() but for a blueprint.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_url_defaults", "args": ["f"], "description": "Same as url_defaults() but application wide.\n"}, -{"name": "Blueprint.app_url_value_preprocessor", "args": ["f"], "description": "Same as url_value_preprocessor() but application wide.\n"}, -{"name": "Blueprint.before_app_first_request", "args": ["f"], "description": "Like Flask.before_first_request(). Such a function is\nexecuted before the first request to the application.\n"}, -{"name": "Blueprint.before_app_request", "args": ["f"], "description": "Like Flask.before_request(). Such a function is executed\nbefore each request, even if outside of a blueprint.\n"}, -{"name": "Blueprint.before_request", "args": ["f"], "description": "Like Flask.before_request() but for a blueprint. This function\nis only executed before each request that is handled by a function of\nthat blueprint.\n"}, -{"name": "Blueprint.context_processor", "args": ["f"], "description": "Like Flask.context_processor() but for a blueprint. This\nfunction is only executed for requests handled by a blueprint.\n"}, -{"name": "Blueprint.endpoint", "args": ["endpoint"], "description": "Like Flask.endpoint() but for a blueprint. This does not\nprefix the endpoint with the blueprint name, this has to be done\nexplicitly by the user of this method. If the endpoint is prefixed\nwith a . it will be registered to the current blueprint, otherwise\nit\u2019s an application independent endpoint.\n"}, -{"name": "Blueprint.errorhandler", "args": ["code_or_exception"], "description": "Registers an error handler that becomes active for this blueprint\nonly. Please be aware that routing does not happen local to a\nblueprint so an error handler for 404 usually is not handled by\na blueprint unless it is caused inside a view function. Another\nspecial case is the 500 internal server error which is always looked\nup from the application.\nOtherwise works as the errorhandler() decorator\nof the Flask object.\n"}, -{"name": "Blueprint.get_send_file_max_age", "args": ["filename"], "description": "Provides default cache_timeout for the send_file() functions.\nBy default, this function returns SEND_FILE_MAX_AGE_DEFAULT from\nthe configuration of current_app.\nStatic file functions such as send_from_directory() use this\nfunction, and send_file() calls this function on\ncurrent_app when the given cache_timeout is None. If a\ncache_timeout is given in send_file(), that timeout is used;\notherwise, this method is called.\nThis allows subclasses to change the behavior when sending files based\non the filename. For example, to set the cache timeout for .js files\nto 60 seconds:\nclass MyFlask(flask.Flask):\n def get_send_file_max_age(self, name):\n if name.lower().endswith('.js'):\n return 60\n return flask.Flask.get_send_file_max_age(self, name)\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Blueprint.make_setup_state", "args": ["app", "options", "first_registration=False"], "description": "Creates an instance of BlueprintSetupState()\nobject that is later passed to the register callback functions.\nSubclasses can override this to return a subclass of the setup state.\n"}, -{"name": "Blueprint.open_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s resource folder. To see\nhow this works, consider the following folder structure:\n/myapplication.py\n/schema.sql\n/static\n /style.css\n/templates\n /layout.html\n /index.html\n\n\nIf you want to open the schema.sql file you would do the\nfollowing:\nwith app.open_resource('schema.sql') as f:\n contents = f.read()\n do_something_with(contents)\n\n\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Blueprint.record", "args": ["func"], "description": "Registers a function that is called when the blueprint is\nregistered on the application. This function is called with the\nstate as argument as returned by the make_setup_state()\nmethod.\n"}, -{"name": "Blueprint.record_once", "args": ["func"], "description": "Works like record() but wraps the function in another\nfunction that will ensure the function is only called once. If the\nblueprint is registered a second time on the application, the\nfunction passed is not called.\n"}, -{"name": "Blueprint.register", "args": ["app", "options", "first_registration=False"], "description": "Called by Flask.register_blueprint() to register all views\nand callbacks registered on the blueprint with the application. Creates\na BlueprintSetupState and calls each record() callback\nwith it.\n\n\n\n\nParameters:\napp \u2013 The application this blueprint is being registered with.\noptions \u2013 Keyword arguments forwarded from\nregister_blueprint().\nfirst_registration \u2013 Whether this is the first time this\nblueprint has been registered on the application.\n\n\n\n\n\n"}, -{"name": "Blueprint.register_error_handler", "args": ["code_or_exception", "f"], "description": "Non-decorator version of the errorhandler() error attach\nfunction, akin to the register_error_handler()\napplication-wide function of the Flask object but\nfor error handlers limited to this blueprint.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Blueprint.route", "args": ["rule", "**options"], "description": "Like Flask.route() but for a blueprint. The endpoint for the\nurl_for() function is prefixed with the name of the blueprint.\n"}, -{"name": "Blueprint.send_static_file", "args": ["filename"], "description": "Function used internally to send static files from the static\nfolder to the browser.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.teardown_app_request", "args": ["f"], "description": "Like Flask.teardown_request() but for a blueprint. Such a\nfunction is executed when tearing down each request, even if outside of\nthe blueprint.\n"}, -{"name": "Blueprint.teardown_request", "args": ["f"], "description": "Like Flask.teardown_request() but for a blueprint. This\nfunction is only executed when tearing down requests handled by a\nfunction of that blueprint. Teardown request functions are executed\nwhen the request context is popped, even when no actual request was\nperformed.\n"}, -{"name": "Blueprint.url_defaults", "args": ["f"], "description": "Callback function for URL defaults for this blueprint. It\u2019s called\nwith the endpoint and values and should update the values passed\nin place.\n"}, -{"name": "Blueprint.url_value_preprocessor", "args": ["f"], "description": "Registers a function as URL value preprocessor for this\nblueprint. It\u2019s called before the view functions are called and\ncan modify the url values provided.\n"}, -{"name": "Blueprint.has_static_folder", "args": null, "description": "This is True if the package bound object\u2019s container has a\nfolder for static files.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.import_name", "args": null, "description": "The name of the package or module that this app belongs to. Do not\nchange this once it is set by the constructor.\n"}, -{"name": "Blueprint.jinja_loader", "args": null, "description": "The Jinja loader for this package bound object.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.json_decoder", "args": null, "description": "Blueprint local JSON decoder class to use.\nSet to None to use the app\u2019s json_decoder.\n"}, -{"name": "Blueprint.json_encoder", "args": null, "description": "Blueprint local JSON decoder class to use.\nSet to None to use the app\u2019s json_encoder.\n"}, -{"name": "Blueprint.root_path", "args": null, "description": "Absolute path to the package on the filesystem. Used to look up\nresources contained in the package.\n"}, -{"name": "Blueprint.static_folder", "args": null, "description": "The absolute path to the configured static folder.\n"}, -{"name": "Blueprint.static_url_path", "args": null, "description": "The URL prefix that the static route will be registered for.\n"}, -{"name": "Blueprint.template_folder", "args": null, "description": "Location of the template files to be added to the template lookup.\nNone if templates should not be added.\n"}, -{"name": "Request", "args": ["environ", "populate_request=True", "shallow=False"], "description": "The request object used by default in Flask. Remembers the\nmatched endpoint and view arguments.\n\nIt is what ends up as request. If you want to replace\nthe request object used you can subclass this and set\nrequest_class to your subclass.\n\nThe request object is a Request subclass and\nprovides all of the attributes Werkzeug defines plus a few Flask\nspecific ones.\n\n"}, -{"name": "Request.close", "args": [], "description": "Closes associated resources of this request object. This\ncloses all file handles explicitly. You can also use the request\nobject in a with statement which will automatically close it.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.get_data", "args": ["cache=True", "as_text=False", "parse_form_data=False"], "description": "This reads the buffered incoming data from the client into one\nbytestring. By default this is cached but that behavior can be\nchanged by setting cache to False.\nUsually it\u2019s a bad idea to call this method without checking the\ncontent length first as a client could send dozens of megabytes or more\nto cause memory problems on the server.\nNote that if the form data was already parsed this method will not\nreturn anything as form data parsing does not cache the data like\nthis method does. To implicitly invoke form data parsing function\nset parse_form_data to True. When this is done the return value\nof this method will be an empty string if the form parser handles\nthe data. This generally is not necessary as if the whole data is\ncached (which is the default) the form parser will used the cached\ndata to parse the form data. Please be generally aware of checking\nthe content length first in any case before calling this method\nto avoid exhausting server memory.\nIf as_text is set to True the return value will be a decoded\nunicode string.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.get_json", "args": ["force=False", "silent=False", "cache=True", "application/json"], "description": "Parse and return the data as JSON. If the mimetype does not\nindicate JSON (application/json, see\nis_json()), this returns None unless force is\ntrue. If parsing fails, on_json_loading_failed() is called\nand its return value is used as the return value.\n\n\n\n\nParameters:\nforce \u2013 Ignore the mimetype and always try to parse JSON.\nsilent \u2013 Silence parsing errors and return None\ninstead.\ncache \u2013 Store the parsed JSON to return for subsequent\ncalls.\n\n\n\n\n\n"}, -{"name": "Request.make_form_data_parser", "args": [], "description": "Creates the form data parser. Instantiates the\nform_data_parser_class with some parameters.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Request.on_json_loading_failed", "args": ["e"], "description": "Called if get_json() parsing fails and isn\u2019t silenced. If\nthis method returns a value, it is used as the return value for\nget_json(). The default implementation raises a\nBadRequest exception.\n\nChangelog\nChanged in version 0.10: Raise a BadRequest error instead of returning an error\nmessage as JSON. If you want that behavior you can add it by\nsubclassing.\n\n\nNew in version 0.8.\n\n"}, -{"name": "Request.environ", "args": null, "description": "The underlying WSGI environment.\n"}, -{"name": "Request.path", "args": null, "description": ""}, -{"name": "Request.full_path", "args": null, "description": ""}, -{"name": "Request.script_root", "args": null, "description": ""}, -{"name": "Request.url", "args": null, "description": ""}, -{"name": "Request.base_url", "args": null, "description": ""}, -{"name": "Request.url_root", "args": null, "description": "Provides different ways to look at the current IRI. Imagine your application is\nlistening on the following application root:\nhttp://www.example.com/myapplication\n\n\nAnd a user requests the following URI:\nhttp://www.example.com/myapplication/%CF%80/page.html?x=y\n\n\nIn this case the values of the above mentioned attributes would be\nthe following:\n\n\n\n\n\n\npath\nu'/\u03c0/page.html'\n\nfull_path\nu'/\u03c0/page.html?x=y'\n\nscript_root\nu'/myapplication'\n\nbase_url\nu'http://www.example.com/myapplication/\u03c0/page.html'\n\nurl\nu'http://www.example.com/myapplication/\u03c0/page.html?x=y'\n\nurl_root\nu'http://www.example.com/myapplication/'\n\n\n\n"}, -{"name": "Request.accept_charsets", "args": null, "description": "List of charsets this client supports as\nCharsetAccept object.\n"}, -{"name": "Request.accept_encodings", "args": null, "description": "List of encodings this client accepts. Encodings in a HTTP term\nare compression encodings such as gzip. For charsets have a look at\naccept_charset.\n"}, -{"name": "Request.accept_languages", "args": null, "description": "List of languages this client accepts as\nLanguageAccept object.\n"}, -{"name": "Request.accept_mimetypes", "args": null, "description": "List of mimetypes this client supports as\nMIMEAccept object.\n"}, -{"name": "Request.access_route", "args": null, "description": "If a forwarded header exists this is a list of all ip addresses\nfrom the client ip to the last proxy server.\n"}, -{"name": "Request.args", "args": null, "description": "The parsed URL parameters (the part in the URL after the question\nmark).\nBy default an\nImmutableMultiDict\nis returned from this function. This can be changed by setting\nparameter_storage_class to a different type. This might\nbe necessary if the order of the form data is important.\n"}, -{"name": "Request.authorization", "args": null, "description": "The Authorization object in parsed form.\n"}, -{"name": "Request.base_url", "args": null, "description": "Like url but without the querystring\nSee also: trusted_hosts.\n"}, -{"name": "Request.blueprint", "args": null, "description": "The name of the current blueprint\n"}, -{"name": "Request.cache_control", "args": null, "description": "A RequestCacheControl object\nfor the incoming cache control headers.\n"}, -{"name": "Request.content_encoding", "args": null, "description": "The Content-Encoding entity-header field is used as a modifier to the\nmedia-type. When present, its value indicates what additional content\ncodings have been applied to the entity-body, and thus what decoding\nmechanisms must be applied in order to obtain the media-type\nreferenced by the Content-Type header field.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.content_length", "args": null, "description": "The Content-Length entity-header field indicates the size of the\nentity-body in bytes or, in the case of the HEAD method, the size of\nthe entity-body that would have been sent had the request been a\nGET.\n"}, -{"name": "Request.content_md5", "args": null, "description": "\nThe Content-MD5 entity-header field, as defined in RFC 1864, is an\nMD5 digest of the entity-body for the purpose of providing an\nend-to-end message integrity check (MIC) of the entity-body. (Note:\na MIC is good for detecting accidental modification of the\nentity-body in transit, but is not proof against malicious attacks.)\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.content_type", "args": null, "description": "The Content-Type entity-header field indicates the media type of\nthe entity-body sent to the recipient or, in the case of the HEAD\nmethod, the media type that would have been sent had the request\nbeen a GET.\n"}, -{"name": "Request.cookies", "args": null, "description": "A dict with the contents of all cookies transmitted with\nthe request.\n"}, -{"name": "Request.data", "args": null, "description": "Contains the incoming request data as string in case it came with\na mimetype Werkzeug does not handle.\n"}, -{"name": "Request.date", "args": null, "description": "The Date general-header field represents the date and time at which\nthe message was originated, having the same semantics as orig-date\nin RFC 822.\n"}, -{"name": "Request.dict_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableTypeConversionDict\n"}, -{"name": "Request.endpoint", "args": null, "description": "The endpoint that matched the request. This in combination with\nview_args can be used to reconstruct the same or a\nmodified URL. If an exception happened when matching, this will\nbe None.\n"}, -{"name": "Request.files", "args": null, "description": "MultiDict object containing\nall uploaded files. Each key in files is the name from the\n. Each value in files is a\nWerkzeug FileStorage object.\nIt basically behaves like a standard file object you know from Python,\nwith the difference that it also has a\nsave() function that can\nstore the file on the filesystem.\nNote that files will only contain data if the request method was\nPOST, PUT or PATCH and the

that posted to the request had\nenctype=\"multipart/form-data\". It will be empty otherwise.\nSee the MultiDict /\nFileStorage documentation for\nmore details about the used data structure.\n"}, -{"name": "Request.form", "args": null, "description": "The form parameters. By default an\nImmutableMultiDict\nis returned from this function. This can be changed by setting\nparameter_storage_class to a different type. This might\nbe necessary if the order of the form data is important.\nPlease keep in mind that file uploads will not end up here, but instead\nin the files attribute.\n\nChangelog\nChanged in version 0.9: Previous to Werkzeug 0.9 this would only contain form data for POST\nand PUT requests.\n\n"}, -{"name": "Request.form_data_parser_class", "args": null, "description": "alias of werkzeug.formparser.FormDataParser\n"}, -{"name": "Request.full_path", "args": null, "description": "Requested path as unicode, including the query string.\n"}, -{"name": "Request.headers", "args": null, "description": "The headers from the WSGI environ as immutable\nEnvironHeaders.\n"}, -{"name": "Request.host", "args": null, "description": "Just the host including the port if available.\nSee also: trusted_hosts.\n"}, -{"name": "Request.host_url", "args": null, "description": "Just the host with scheme as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.if_match", "args": null, "description": "An object containing all the etags in the If-Match header.\n\n\n\n\nReturn type:ETags\n\n\n\n"}, -{"name": "Request.if_modified_since", "args": null, "description": "The parsed If-Modified-Since header as datetime object.\n"}, -{"name": "Request.if_none_match", "args": null, "description": "An object containing all the etags in the If-None-Match header.\n\n\n\n\nReturn type:ETags\n\n\n\n"}, -{"name": "Request.if_range", "args": null, "description": "The parsed If-Range header.\n\nChangelog\nNew in version 0.7.\n\n\n\n\n\nReturn type:IfRange\n\n\n\n"}, -{"name": "Request.if_unmodified_since", "args": null, "description": "The parsed If-Unmodified-Since header as datetime object.\n"}, -{"name": "Request.is_json", "args": null, "description": "Check if the mimetype indicates JSON data, either\napplication/json or application/*+json.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Request.is_multiprocess", "args": null, "description": "boolean that is True if the application is served by\na WSGI server that spawns multiple processes.\n"}, -{"name": "Request.is_multithread", "args": null, "description": "boolean that is True if the application is served by\na multithreaded WSGI server.\n"}, -{"name": "Request.is_run_once", "args": null, "description": "boolean that is True if the application will be executed only\nonce in a process lifetime. This is the case for CGI for example,\nbut it\u2019s not guaranteed that the execution only happens one time.\n"}, -{"name": "Request.is_secure", "args": null, "description": "True if the request is secure.\n"}, -{"name": "Request.is_xhr", "args": null, "description": "True if the request was triggered via a JavaScript XMLHttpRequest.\nThis only works with libraries that support the X-Requested-With\nheader and set it to \u201cXMLHttpRequest\u201d. Libraries that do that are\nprototype, jQuery and Mochikit and probably some more.\n\nDeprecated since version 0.13: X-Requested-With is not standard and is unreliable.\n\n\nChangelog"}, -{"name": "Request.json", "args": null, "description": "This will contain the parsed JSON data if the mimetype indicates\nJSON (application/json, see is_json()), otherwise it\nwill be None.\n"}, -{"name": "Request.list_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableList\n"}, -{"name": "Request.max_content_length", "args": null, "description": "Read-only view of the MAX_CONTENT_LENGTH config key.\n"}, -{"name": "Request.max_forwards", "args": null, "description": "The Max-Forwards request-header field provides a mechanism with the\nTRACE and OPTIONS methods to limit the number of proxies or gateways\nthat can forward the request to the next inbound server.\n"}, -{"name": "Request.method", "args": null, "description": "The request method. (For example 'GET' or 'POST').\n"}, -{"name": "Request.mimetype", "args": null, "description": "Like content_type, but without parameters (eg, without\ncharset, type etc.) and always lowercase. For example if the content\ntype is text/HTML; charset=utf-8 the mimetype would be\n'text/html'.\n"}, -{"name": "Request.mimetype_params", "args": null, "description": "The mimetype parameters as dict. For example if the content\ntype is text/html; charset=utf-8 the params would be\n{'charset': 'utf-8'}.\n"}, -{"name": "Request.parameter_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableMultiDict\n"}, -{"name": "Request.path", "args": null, "description": "Requested path as unicode. This works a bit like the regular path\ninfo in the WSGI environment but will always include a leading slash,\neven if the URL root is accessed.\n"}, -{"name": "Request.pragma", "args": null, "description": "The Pragma general-header field is used to include\nimplementation-specific directives that might apply to any recipient\nalong the request/response chain. All pragma directives specify\noptional behavior from the viewpoint of the protocol; however, some\nsystems MAY require that behavior be consistent with the directives.\n"}, -{"name": "Request.query_string", "args": null, "description": "The URL parameters as raw bytestring.\n"}, -{"name": "Request.range", "args": null, "description": "The parsed Range header.\n\nChangelog\nNew in version 0.7.\n\n\n\n\n\nReturn type:Range\n\n\n\n"}, -{"name": "Request.referrer", "args": null, "description": "The Referer[sic] request-header field allows the client to specify,\nfor the server\u2019s benefit, the address (URI) of the resource from which\nthe Request-URI was obtained (the \u201creferrer\u201d, although the header\nfield is misspelled).\n"}, -{"name": "Request.remote_addr", "args": null, "description": "The remote address of the client.\n"}, -{"name": "Request.remote_user", "args": null, "description": "If the server supports user authentication, and the script is\nprotected, this attribute contains the username the user has\nauthenticated as.\n"}, -{"name": "Request.routing_exception", "args": null, "description": "If matching the URL failed, this is the exception that will be\nraised / was raised as part of the request handling. This is\nusually a NotFound exception or\nsomething similar.\n"}, -{"name": "Request.scheme", "args": null, "description": "URL scheme (http or https).\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Request.script_root", "args": null, "description": "The root path of the script without the trailing slash.\n"}, -{"name": "Request.stream", "args": null, "description": "If the incoming form data was not encoded with a known mimetype\nthe data is stored unmodified in this stream for consumption. Most\nof the time it is a better idea to use data which will give\nyou that data as a string. The stream only returns the data once.\nUnlike input_stream this stream is properly guarded that you\ncan\u2019t accidentally read past the length of the input. Werkzeug will\ninternally always refer to this stream to read data which makes it\npossible to wrap this object with a stream that does filtering.\n\nChangelog\nChanged in version 0.9: This stream is now always available but might be consumed by the\nform parser later on. Previously the stream was only set if no\nparsing happened.\n\n"}, -{"name": "Request.url", "args": null, "description": "The reconstructed current URL as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.url_charset", "args": null, "description": "The charset that is assumed for URLs. Defaults to the value\nof charset.\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "Request.url_root", "args": null, "description": "The full URL root (with hostname), this is the application\nroot as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.url_rule", "args": null, "description": "The internal URL rule that matched the request. This can be\nuseful to inspect which methods are allowed for the URL from\na before/after handler (request.url_rule.methods) etc.\nThough if the request\u2019s method was invalid for the URL rule,\nthe valid list is available in routing_exception.valid_methods\ninstead (an attribute of the Werkzeug exception MethodNotAllowed)\nbecause the request was never internally bound.\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "Request.user_agent", "args": null, "description": "The current user agent.\n"}, -{"name": "Request.values", "args": null, "description": "A werkzeug.datastructures.CombinedMultiDict that combines\nargs and form.\n"}, -{"name": "Request.view_args", "args": null, "description": "A dict of view arguments that matched the request. If an exception\nhappened when matching, this will be None.\n"}, -{"name": "Request.want_form_data_parsed", "args": null, "description": "Returns True if the request method carries content. As of\nWerkzeug 0.9 this will be the case if a content type is transmitted.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Response", "args": ["response=None", "status=None", "headers=None", "mimetype=None", "content_type=None", "direct_passthrough=False"], "description": "The response object that is used by default in Flask. Works like the\nresponse object from Werkzeug but is set to have an HTML mimetype by\ndefault. Quite often you don\u2019t have to create this object yourself because\nmake_response() will take care of that for you.\n\nIf you want to replace the response object used you can subclass this and\nset response_class to your subclass.\n\n"}, -{"name": "Response.get_json", "args": ["force=False", "silent=False", "cache=True", "application/json"], "description": "Parse and return the data as JSON. If the mimetype does not\nindicate JSON (application/json, see\nis_json()), this returns None unless force is\ntrue. If parsing fails, on_json_loading_failed() is called\nand its return value is used as the return value.\n\n\n\n\nParameters:\nforce \u2013 Ignore the mimetype and always try to parse JSON.\nsilent \u2013 Silence parsing errors and return None\ninstead.\ncache \u2013 Store the parsed JSON to return for subsequent\ncalls.\n\n\n\n\n\n"}, -{"name": "Response.set_cookie", "args": ["key", "value=''", "max_age=None", "expires=None", "path='/'", "domain=None", "secure=False", "httponly=False", "samesite=None"], "description": "Sets a cookie. The parameters are the same as in the cookie Morsel\nobject in the Python standard library but it accepts unicode data, too.\nA warning is raised if the size of the cookie header exceeds\nmax_cookie_size, but the header will still be set.\n\n\n\n\nParameters:\nkey \u2013 the key (name) of the cookie to be set.\nvalue \u2013 the value of the cookie.\nmax_age \u2013 should be a number of seconds, or None (default) if\nthe cookie should last only as long as the client\u2019s\nbrowser session.\nexpires \u2013 should be a datetime object or UNIX timestamp.\npath \u2013 limits the cookie to a given path, per default it will\nspan the whole domain.\ndomain \u2013 if you want to set a cross-domain cookie. For example,\ndomain=\".example.com\" will set a cookie that is\nreadable by the domain www.example.com,\nfoo.example.com etc. Otherwise, a cookie will only\nbe readable by the domain that set it.\nsecure \u2013 If True, the cookie will only be available via HTTPS\nhttponly \u2013 disallow JavaScript to access the cookie. This is an\nextension to the cookie standard and probably not\nsupported by all browsers.\nsamesite \u2013 Limits the scope of the cookie such that it will only\nbe attached to requests if those requests are\n\u201csame-site\u201d.\n\n\n\n\n\n"}, -{"name": "Response.headers", "args": null, "description": "A Headers object representing the response headers.\n"}, -{"name": "Response.status", "args": null, "description": "A string with a response status.\n"}, -{"name": "Response.status_code", "args": null, "description": "The response status as integer.\n"}, -{"name": "Response.data", "args": null, "description": "A descriptor that calls get_data() and set_data(). This\nshould not be used and will eventually get deprecated.\n"}, -{"name": "Response.is_json", "args": null, "description": "Check if the mimetype indicates JSON data, either\napplication/json or application/*+json.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Response.max_cookie_size", "args": null, "description": "Read-only view of the MAX_COOKIE_SIZE config key.\nSee max_cookie_size in\nWerkzeug\u2019s docs.\n"}, -{"name": "Response.mimetype", "args": null, "description": "The mimetype (content type without charset etc.)\n"}, -{"name": "session", "args": [], "description": "The session object works pretty much like an ordinary dict, with the\ndifference that it keeps track on modifications.\n\nThis is a proxy. See Notes On Proxies for more information.\n\nThe following attributes are interesting:\n\n"}, -{"name": "session.new", "args": null, "description": "True if the session is new, False otherwise.\n"}, -{"name": "session.modified", "args": null, "description": "True if the session object detected a modification. Be advised\nthat modifications on mutable structures are not picked up\nautomatically, in that situation you have to explicitly set the\nattribute to True yourself. Here an example:\n# this change is not picked up because a mutable object (here\n# a list) is changed.\nsession['objects'].append(42)\n# so mark it as modified yourself\nsession.modified = True\n\n\n"}, -{"name": "session.permanent", "args": null, "description": "If set to True the session lives for\npermanent_session_lifetime seconds. The\ndefault is 31 days. If set to False (which is the default) the\nsession will be deleted when the user closes the browser.\n"}, -{"name": "SessionInterface", "args": [], "description": "The basic interface you have to implement in order to replace the\ndefault session interface which uses werkzeug\u2019s securecookie\nimplementation. The only methods you have to implement are\nopen_session() and save_session(), the others have\nuseful defaults which you don\u2019t need to change.\n\nThe session object returned by the open_session() method has to\nprovide a dictionary like interface plus the properties and methods\nfrom the SessionMixin. We recommend just subclassing a dict\nand adding that mixin:\n\nIf open_session() returns None Flask will call into\nmake_null_session() to create a session that acts as replacement\nif the session support cannot work because some requirement is not\nfulfilled. The default NullSession class that is created\nwill complain that the secret key was not set.\n\nTo replace the session interface on an application all you have to do\nis to assign flask.Flask.session_interface:\n\n"}, -{"name": "SessionInterface.get_cookie_domain", "args": ["app"], "description": "Returns the domain that should be set for the session cookie.\nUses SESSION_COOKIE_DOMAIN if it is configured, otherwise\nfalls back to detecting the domain based on SERVER_NAME.\nOnce detected (or if not set at all), SESSION_COOKIE_DOMAIN is\nupdated to avoid re-running the logic.\n"}, -{"name": "SessionInterface.get_cookie_httponly", "args": ["app"], "description": "Returns True if the session cookie should be httponly. This\ncurrently just returns the value of the SESSION_COOKIE_HTTPONLY\nconfig var.\n"}, -{"name": "SessionInterface.get_cookie_path", "args": ["app"], "description": "Returns the path for which the cookie should be valid. The\ndefault implementation uses the value from the SESSION_COOKIE_PATH\nconfig var if it\u2019s set, and falls back to APPLICATION_ROOT or\nuses / if it\u2019s None.\n"}, -{"name": "SessionInterface.get_cookie_samesite", "args": ["app"], "description": "Return 'Strict' or 'Lax' if the cookie should use the\nSameSite attribute. This currently just returns the value of\nthe SESSION_COOKIE_SAMESITE setting.\n"}, -{"name": "SessionInterface.get_cookie_secure", "args": ["app"], "description": "Returns True if the cookie should be secure. This currently\njust returns the value of the SESSION_COOKIE_SECURE setting.\n"}, -{"name": "SessionInterface.get_expiration_time", "args": ["app", "session"], "description": "A helper method that returns an expiration date for the session\nor None if the session is linked to the browser session. The\ndefault implementation returns now + the permanent session\nlifetime configured on the application.\n"}, -{"name": "SessionInterface.is_null_session", "args": ["obj"], "description": "Checks if a given object is a null session. Null sessions are\nnot asked to be saved.\nThis checks if the object is an instance of null_session_class\nby default.\n"}, -{"name": "SessionInterface.make_null_session", "args": ["app"], "description": "Creates a null session which acts as a replacement object if the\nreal session support could not be loaded due to a configuration\nerror. This mainly aids the user experience because the job of the\nnull session is to still support lookup without complaining but\nmodifications are answered with a helpful error message of what\nfailed.\nThis creates an instance of null_session_class by default.\n"}, -{"name": "SessionInterface.open_session", "args": ["app", "request"], "description": "This method has to be implemented and must either return None\nin case the loading failed because of a configuration error or an\ninstance of a session object which implements a dictionary like\ninterface + the methods and attributes on SessionMixin.\n"}, -{"name": "SessionInterface.save_session", "args": ["app", "session", "response"], "description": "This is called for actual sessions returned by open_session()\nat the end of the request. This is still called during a request\ncontext so if you absolutely need access to the request you can do\nthat.\n"}, -{"name": "SessionInterface.should_set_cookie", "args": ["app", "session"], "description": "Used by session backends to determine if a Set-Cookie header\nshould be set for this session cookie for this response. If the session\nhas been modified, the cookie is set. If the session is permanent and\nthe SESSION_REFRESH_EACH_REQUEST config is true, the cookie is\nalways set.\nThis check is usually skipped if the session was deleted.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "SessionInterface.null_session_class", "args": null, "description": "make_null_session() will look here for the class that should\nbe created when a null session is requested. Likewise the\nis_null_session() method will perform a typecheck against\nthis type.\nalias of NullSession\n"}, -{"name": "SessionInterface.pickle_based", "args": null, "description": "A flag that indicates if the session interface is pickle based.\nThis can be used by Flask extensions to make a decision in regards\nto how to deal with the session object.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "SecureCookieSessionInterface", "args": [], "description": "The default session interface that stores sessions in signed cookies\nthrough the itsdangerous module.\n\n"}, -{"name": "SecureCookieSessionInterface.open_session", "args": ["app", "request"], "description": "This method has to be implemented and must either return None\nin case the loading failed because of a configuration error or an\ninstance of a session object which implements a dictionary like\ninterface + the methods and attributes on SessionMixin.\n"}, -{"name": "SecureCookieSessionInterface.save_session", "args": ["app", "session", "response"], "description": "This is called for actual sessions returned by open_session()\nat the end of the request. This is still called during a request\ncontext so if you absolutely need access to the request you can do\nthat.\n"}, -{"name": "SecureCookieSessionInterface.key_derivation", "args": null, "description": "the name of the itsdangerous supported key derivation. The default\nis hmac.\n"}, -{"name": "SecureCookieSessionInterface.salt", "args": null, "description": "the salt that should be applied on top of the secret key for the\nsigning of cookie based sessions.\n"}, -{"name": "SecureCookieSessionInterface.serializer", "args": null, "description": "A python serializer for the payload. The default is a compact\nJSON derived serializer with support for some extra Python types\nsuch as datetime objects or tuples.\n"}, -{"name": "SecureCookieSessionInterface.session_class", "args": null, "description": "alias of SecureCookieSession\n"}, -{"name": "SecureCookieSession", "args": ["initial=None"], "description": "Base class for sessions based on signed cookies.\n\nThis session backend will set the modified and\naccessed attributes. It cannot reliably track whether a\nsession is new (vs. empty), so new remains hard coded to\nFalse.\n\n"}, -{"name": "SecureCookieSession.get", "args": ["k", "d"], "description": ""}, -{"name": "SecureCookieSession.setdefault", "args": ["k", "d"], "description": ""}, -{"name": "SecureCookieSession.accessed", "args": null, "description": "header, which allows caching proxies to cache different pages for\ndifferent users.\n"}, -{"name": "SecureCookieSession.modified", "args": null, "description": "When data is changed, this is set to True. Only the session\ndictionary itself is tracked; if the session contains mutable\ndata (for example a nested dict) then this must be set to\nTrue manually when modifying that data. The session cookie\nwill only be written to the response if this is True.\n"}, -{"name": "NullSession", "args": ["initial=None"], "description": "Class used to generate nicer error messages if sessions are not\navailable. Will still allow read-only access to the empty session\nbut fail on setting.\n\n"}, -{"name": "SessionMixin", "args": [], "description": "Expands a basic dictionary with session attributes.\n\n"}, -{"name": "SessionMixin.accessed", "args": null, "description": "Some implementations can detect when session data is read or\nwritten and set this when that happens. The mixin default is hard\ncoded to True.\n"}, -{"name": "SessionMixin.modified", "args": null, "description": "Some implementations can detect changes to the session and set\nthis when that happens. The mixin default is hard coded to\nTrue.\n"}, -{"name": "SessionMixin.permanent", "args": null, "description": "This reflects the '_permanent' key in the dict.\n"}, -{"name": "FlaskClient", "args": ["*args", "**kwargs"], "description": "Works like a regular Werkzeug test client but has some knowledge about\nhow Flask works to defer the cleanup of the request context stack to the\nend of a with body when used in a with statement. For general\ninformation about how to use this class refer to\nwerkzeug.test.Client.\n\nBasic usage is outlined in the Testing Flask Applications chapter.\n\n"}, -{"name": "FlaskClient.open", "args": ["*args", "**kwargs"], "description": "Takes the same arguments as the EnvironBuilder class with\nsome additions: You can provide a EnvironBuilder or a WSGI\nenvironment as only argument instead of the EnvironBuilder\narguments and two optional keyword arguments (as_tuple, buffered)\nthat change the type of the return value or the way the application is\nexecuted.\n\nChangelog\nChanged in version 0.5: If a dict is provided as file in the dict for the data parameter\nthe content type has to be called content_type now instead of\nmimetype. This change was made for consistency with\nwerkzeug.FileWrapper.\n\nThe follow_redirects parameter was added to open().\n\nAdditional parameters:\n\n\n\n\nParameters:\nas_tuple \u2013 Returns a tuple in the form (environ, result)\nbuffered \u2013 Set this to True to buffer the application run.\nThis will automatically close the application for\nyou as well.\nfollow_redirects \u2013 Set this to True if the Client should\nfollow HTTP redirects.\n\n\n\n\n\n"}, -{"name": "FlaskClient.session_transaction", "args": ["*args", "**kwargs"], "description": "When used in combination with a with statement this opens a\nsession transaction. This can be used to modify the session that\nthe test client uses. Once the with block is left the session is\nstored back.\nwith client.session_transaction() as session:\n session['value'] = 42\n\n\nInternally this is implemented by going through a temporary test\nrequest context and since session handling could depend on\nrequest variables this function accepts the same arguments as\ntest_request_context() which are directly\npassed through.\n"}, -{"name": "FlaskCliRunner", "args": ["app", "**kwargs"], "description": "A CliRunner for testing a Flask app\u2019s\nCLI commands. Typically created using\ntest_cli_runner(). See Testing CLI Commands.\n\n"}, -{"name": "FlaskCliRunner.invoke", "args": ["cli=None", "args=None", "**kwargs"], "description": "Invokes a CLI command in an isolated environment. See\nCliRunner.invoke for\nfull method documentation. See Testing CLI Commands for examples.\nIf the obj argument is not given, passes an instance of\nScriptInfo that knows how to load the Flask\napp being tested.\n\n\n\n\nParameters:\ncli \u2013 Command object to invoke. Default is the app\u2019s\ncli group.\nargs \u2013 List of strings to invoke the command with.\n\n\n\nReturns:a Result object.\n\n\n\n\n"}, -{"name": "_AppCtxGlobals", "args": [], "description": "A plain object. Used as a namespace for storing data during an\napplication context.\n\nCreating an app context automatically creates this object, which is\nmade available as the g proxy.\n\n"}, -{"name": "_AppCtxGlobals.get", "args": ["name", "default=None"], "description": "Get an attribute by name, or a default value. Like\ndict.get().\n\n\n\n\nParameters:\nname \u2013 Name of attribute to get.\ndefault \u2013 Value to return if the attribute is not present.\n\n\n\n\n\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "_AppCtxGlobals.pop", "args": ["name", "default=<object object>"], "description": "Get and remove an attribute by name. Like dict.pop().\n\n\n\n\nParameters:\nname \u2013 Name of attribute to pop.\ndefault \u2013 Value to return if the attribute is not present,\ninstead of raise a KeyError.\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "_AppCtxGlobals.setdefault", "args": ["name", "default=None"], "description": "Get the value of an attribute if it is present, otherwise\nset and return a default value. Like dict.setdefault().\n\n\n\n\nParameters:name \u2013 Name of attribute to get.\n\nParam:default: Value to set and return if the attribute is not\npresent.\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Markup", "args": [], "description": "Marks a string as being safe for inclusion in HTML/XML output without\nneeding to be escaped. This implements the __html__ interface a couple\nof frameworks and web applications use. Markup is a direct\nsubclass of unicode and provides all the methods of unicode just that\nit escapes arguments passed and always returns Markup.\n\nThe escape function returns markup objects so that double escaping can\u2019t\nhappen.\n\nThe constructor of the Markup class can be used for three\ndifferent things: When passed an unicode object it\u2019s assumed to be safe,\nwhen passed an object with an HTML representation (has an __html__\nmethod) that representation is used, otherwise the object passed is\nconverted into a unicode string and then assumed to be safe:\n\nIf you want object passed being always treated as unsafe you can use the\nescape() classmethod to create a Markup object:\n\nOperations on a markup string are markup aware which means that all\narguments are passed through the escape() function:\n\n"}, -{"name": "Markup.striptags", "args": [], "description": "Unescape markup into an text_type string and strip all tags. This\nalso resolves known HTML4 and XHTML entities. Whitespace is\nnormalized to one:\n>>> Markup(\"Main » About\").striptags()\nu'Main \\xbb About'\n\n\n"}, -{"name": "Markup.unescape", "args": [], "description": "Unescape markup again into an text_type string. This also resolves\nknown HTML4 and XHTML entities:\n>>> Markup(\"Main » About\").unescape()\nu'Main \\xbb About'\n\n\n"}, -{"name": "JSONEncoder", "args": ["*", "skipkeys=False", "ensure_ascii=True", "check_circular=True", "allow_nan=True", "sort_keys=False", "indent=None", "separators=None", "default=None"], "description": "The default Flask JSON encoder. This one extends the default simplejson\nencoder by also supporting datetime objects, UUID as well as\nMarkup objects which are serialized as RFC 822 datetime strings (same\nas the HTTP date format). In order to support more data types override the\ndefault() method.\n\n"}, -{"name": "JSONEncoder.default", "args": ["o"], "description": "Implement this method in a subclass such that it returns a\nserializable object for o, or calls the base implementation (to\nraise a TypeError).\nFor example, to support arbitrary iterators, you could implement\ndefault like this:\ndef default(self, o):\n try:\n iterable = iter(o)\n except TypeError:\n pass\n else:\n return list(iterable)\n return JSONEncoder.default(self, o)\n\n\n"}, -{"name": "JSONDecoder", "args": ["*", "object_hook=None", "parse_float=None", "parse_int=None", "parse_constant=None", "strict=True", "object_pairs_hook=None"], "description": "The default JSON decoder. This one does not change the behavior from\nthe default simplejson decoder. Consult the json documentation\nfor more information. This decoder is not only used for the load\nfunctions of this module but also Request.\n\n"}, -{"name": "TaggedJSONSerializer", "args": [], "description": "Serializer that uses a tag system to compactly represent objects that\nare not JSON types. Passed as the intermediate serializer to\nitsdangerous.Serializer.\n\nThe following extra types are supported:\n\n"}, -{"name": "TaggedJSONSerializer.dumps", "args": ["value"], "description": "Tag the value and dump it to a compact JSON string.\n"}, -{"name": "TaggedJSONSerializer.loads", "args": ["value"], "description": "Load data from a JSON string and deserialized any tagged objects.\n"}, -{"name": "TaggedJSONSerializer.register", "args": ["tag_class", "force=False", "index=None"], "description": "Register a new tag with this serializer.\n\n\n\n\nParameters:\ntag_class \u2013 tag class to register. Will be instantiated with this\nserializer instance.\nforce \u2013 overwrite an existing tag. If false (default), a\nKeyError is raised.\nindex \u2013 index to insert the new tag in the tag order. Useful when\nthe new tag is a special case of an existing tag. If None\n(default), the tag is appended to the end of the order.\n\n\n\nRaises:KeyError \u2013 if the tag key is already registered and force is\nnot true.\n\n\n\n\n"}, -{"name": "TaggedJSONSerializer.tag", "args": ["value"], "description": "Convert a value to a tagged representation if necessary.\n"}, -{"name": "TaggedJSONSerializer.untag", "args": ["value"], "description": "Convert a tagged representation back to the original type.\n"}, -{"name": "TaggedJSONSerializer.default_tags", "args": null, "description": "Tag classes to bind when creating the serializer. Other tags can be\nadded later using register().\n"}, -{"name": "JSONTag", "args": ["serializer"], "description": "Base class for defining type tags for TaggedJSONSerializer.\n\n"}, -{"name": "JSONTag.check", "args": ["value"], "description": "Check if the given value should be tagged by this tag.\n"}, -{"name": "JSONTag.tag", "args": ["value"], "description": "Convert the value to a valid JSON type and add the tag structure\naround it.\n"}, -{"name": "JSONTag.to_json", "args": ["value"], "description": "Convert the Python object to an object that is a valid JSON type.\nThe tag will be added later.\n"}, -{"name": "JSONTag.to_python", "args": ["value"], "description": "Convert the JSON representation back to the correct type. The tag\nwill already be removed.\n"}, -{"name": "JSONTag.key", "args": null, "description": "The tag to mark the serialized object with. If None, this tag is\nonly used as an intermediate step during tagging.\n"}, -{"name": "Config", "args": ["root_path", "defaults=None"], "description": "Works exactly like a dict but provides ways to fill it from files\nor special dictionaries. There are two common patterns to populate the\nconfig.\n\nEither you can fill the config from a config file:\n\nOr alternatively you can define the configuration options in the\nmodule that calls from_object() or provide an import path to\na module that should be loaded. It is also possible to tell it to\nuse the same module and with that provide the configuration values\njust before the call:\n\nIn both cases (loading from any Python file or loading from modules),\nonly uppercase keys are added to the config. This makes it possible to use\nlowercase values in the config file for temporary values that are not added\nto the config or to define the config keys in the same file that implements\nthe application.\n\nProbably the most interesting way to load configurations is from an\nenvironment variable pointing to a file:\n\nIn this case before launching the application you have to set this\nenvironment variable to the file you want to use. On Linux and OS X\nuse the export statement:\n\nOn windows use set instead.\n\n\nParameters:\nroot_path \u2013 path to which files are read relative from. When the\nconfig object is created by the application, this is\nthe application\u2019s root_path.\ndefaults \u2013 an optional dictionary of default values"}, -{"name": "Config.from_envvar", "args": ["variable_name", "silent=False"], "description": "Loads a configuration from an environment variable pointing to\na configuration file. This is basically just a shortcut with nicer\nerror messages for this line of code:\napp.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])\n\n\n\n\n\n\nParameters:\nvariable_name \u2013 name of the environment variable\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\nReturns:bool. True if able to load config, False otherwise.\n\n\n\n\n"}, -{"name": "Config.from_json", "args": ["filename", "silent=False"], "description": "Updates the values in the config from a JSON file. This function\nbehaves as if the JSON object was a dictionary and passed to the\nfrom_mapping() function.\n\n\n\n\nParameters:\nfilename \u2013 the filename of the JSON file. This can either be an\nabsolute filename or a filename relative to the\nroot path.\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Config.from_mapping", "args": ["*mapping", "**kwargs"], "description": "Updates the config like update() ignoring items with non-upper\nkeys.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Config.from_object", "args": ["obj"], "description": "Updates the values from the given object. An object can be of one\nof the following two types:\n\na string: in this case the object with that name will be imported\nan actual object reference: that object is used directly\n\nObjects are usually either modules or classes. from_object()\nloads only the uppercase attributes of the module/class. A dict\nobject will not work with from_object() because the keys of a\ndict are not attributes of the dict class.\nExample of module-based configuration:\napp.config.from_object('yourapplication.default_config')\nfrom yourapplication import default_config\napp.config.from_object(default_config)\n\n\nYou should not use this function to load the actual configuration but\nrather configuration defaults. The actual config should be loaded\nwith from_pyfile() and ideally from a location not within the\npackage because the package might be installed system wide.\nSee Development / Production for an example of class-based configuration\nusing from_object().\n\n\n\n\nParameters:obj \u2013 an import name or object\n\n\n\n"}, -{"name": "Config.from_pyfile", "args": ["filename", "silent=False"], "description": "Updates the values in the config from a Python file. This function\nbehaves as if the file was imported as module with the\nfrom_object() function.\n\n\n\n\nParameters:\nfilename \u2013 the filename of the config. This can either be an\nabsolute filename or a filename relative to the\nroot path.\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\n\n\n\nChangelog\nNew in version 0.7: silent parameter.\n\n"}, -{"name": "Config.get_namespace", "args": ["namespace", "lowercase=True", "trim_namespace=True"], "description": "Returns a dictionary containing a subset of configuration options\nthat match the specified namespace/prefix. Example usage:\napp.config['IMAGE_STORE_TYPE'] = 'fs'\napp.config['IMAGE_STORE_PATH'] = '/var/app/images'\napp.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com'\nimage_store_config = app.config.get_namespace('IMAGE_STORE_')\n\n\nThe resulting dictionary image_store_config would look like:\n{\n 'type': 'fs',\n 'path': '/var/app/images',\n 'base_url': 'http://img.website.com'\n}\n\n\nThis is often useful when configuration options map directly to\nkeyword arguments in functions or class constructors.\n\n\n\n\nParameters:\nnamespace \u2013 a configuration namespace\nlowercase \u2013 a flag indicating if the keys of the resulting\ndictionary should be lowercase\ntrim_namespace \u2013 a flag indicating if the keys of the resulting\ndictionary should not include the namespace\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "RequestContext", "args": ["app", "environ", "request=None"], "description": "The request context contains all request relevant information. It is\ncreated at the beginning of the request and pushed to the\n_request_ctx_stack and removed at the end of it. It will create the\nURL adapter and request object for the WSGI environment provided.\n\nDo not attempt to use this class directly, instead use\ntest_request_context() and\nrequest_context() to create this object.\n\nWhen the request context is popped, it will evaluate all the\nfunctions registered on the application for teardown execution\n(teardown_request()).\n\nThe request context is automatically popped at the end of the request\nfor you. In debug mode the request context is kept around if\nexceptions happen so that interactive debuggers have a chance to\nintrospect the data. With 0.4 this can also be forced for requests\nthat did not fail and outside of DEBUG mode. By setting\n'flask._preserve_context' to True on the WSGI environment the\ncontext will not pop itself at the end of the request. This is used by\nthe test_client() for example to implement the\ndeferred cleanup functionality.\n\nYou might find this helpful for unittests where you need the\ninformation from the context local around for a little longer. Make\nsure to properly pop() the stack yourself in\nthat situation, otherwise your unittests will leak memory.\n\n"}, -{"name": "RequestContext.copy", "args": [], "description": "Creates a copy of this request context with the same request object.\nThis can be used to move a request context to a different greenlet.\nBecause the actual request object is the same this cannot be used to\nmove a request context to a different thread unless access to the\nrequest object is locked.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "RequestContext.match_request", "args": [], "description": "Can be overridden by a subclass to hook into the matching\nof the request.\n"}, -{"name": "RequestContext.pop", "args": ["exc=<object object>"], "description": "Pops the request context and unbinds it by doing that. This will\nalso trigger the execution of functions registered by the\nteardown_request() decorator.\n\nChangelog\nChanged in version 0.9: Added the exc argument.\n\n"}, -{"name": "RequestContext.push", "args": [], "description": "Binds the request context to the current context.\n"}, -{"name": "AppContext", "args": ["app"], "description": "The application context binds an application object implicitly\nto the current thread or greenlet, similar to how the\nRequestContext binds request information. The application\ncontext is also implicitly created if a request context is created\nbut the application is not on top of the individual application\ncontext.\n\n"}, -{"name": "AppContext.pop", "args": ["exc=<object object>"], "description": "Pops the app context.\n"}, -{"name": "AppContext.push", "args": [], "description": "Binds the app context to the current context.\n"}, -{"name": "BlueprintSetupState", "args": ["blueprint", "app", "options", "first_registration"], "description": "Temporary holder object for registering a blueprint with the\napplication. An instance of this class is created by the\nmake_setup_state() method and later passed\nto all register callback functions.\n\n"}, -{"name": "BlueprintSetupState.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "**options"], "description": "A helper method to register a rule (and optionally a view function)\nto the application. The endpoint is automatically prefixed with the\nblueprint\u2019s name.\n"}, -{"name": "BlueprintSetupState.app", "args": null, "description": "a reference to the current application\n"}, -{"name": "BlueprintSetupState.blueprint", "args": null, "description": "a reference to the blueprint that created this setup state.\n"}, -{"name": "BlueprintSetupState.first_registration", "args": null, "description": "as blueprints can be registered multiple times with the\napplication and not everything wants to be registered\nmultiple times on it, this attribute can be used to figure\nout if the blueprint was registered in the past already.\n"}, -{"name": "BlueprintSetupState.options", "args": null, "description": "a dictionary with all options that were passed to the\nregister_blueprint() method.\n"}, -{"name": "BlueprintSetupState.subdomain", "args": null, "description": "The subdomain that the blueprint should be active for, None\notherwise.\n"}, -{"name": "BlueprintSetupState.url_defaults", "args": null, "description": "A dictionary with URL defaults that is added to each and every\nURL that was defined with the blueprint.\n"}, -{"name": "BlueprintSetupState.url_prefix", "args": null, "description": "The prefix that should be used for all URLs defined on the\nblueprint.\n"}, -{"name": "Namespace", "args": [], "description": "An alias for blinker.base.Namespace if blinker is available,\notherwise a dummy class that creates fake signals. This class is\navailable for Flask extensions that want to provide the same fallback\nsystem as Flask itself.\n\n"}, -{"name": "Namespace.signal", "args": ["name", "doc=None"], "description": "Creates a new signal for this namespace if blinker is available,\notherwise returns a fake signal that has a send method that will\ndo nothing but will fail with a RuntimeError for all other\noperations, including connecting.\n"}, -{"name": "View", "args": [], "description": "Alternative way to use view functions. A subclass has to implement\ndispatch_request() which is called with the view arguments from\nthe URL routing system. If methods is provided the methods\ndo not have to be passed to the add_url_rule()\nmethod explicitly:\n\nWhen you want to decorate a pluggable view you will have to either do that\nwhen the view function is created (by wrapping the return value of\nas_view()) or you can use the decorators attribute:\n\nThe decorators stored in the decorators list are applied one after another\nwhen the view function is created. Note that you can not use the class\nbased decorators since those would decorate the view class and not the\ngenerated view function!\n\n"}, -{"name": "View.dispatch_request", "args": [], "description": "Subclasses have to override this method to implement the\nactual view function code. This method is called with all\nthe arguments from the URL rule.\n"}, -{"name": "View.decorators", "args": null, "description": "The canonical way to decorate class-based views is to decorate the\nreturn value of as_view(). However since this moves parts of the\nlogic from the class declaration to the place where it\u2019s hooked\ninto the routing system.\nYou can place one or more decorators in this list and whenever the\nview function is created the result is automatically decorated.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "View.methods", "args": null, "description": "A list of methods this view can handle.\n"}, -{"name": "View.provide_automatic_options", "args": null, "description": "Setting this disables or force-enables the automatic options handling.\n"}, -{"name": "MethodView", "args": [], "description": "A class-based view that dispatches request methods to the corresponding\nclass methods. For example, if you implement a get method, it will be\nused to handle GET requests.\n\n"}, -{"name": "MethodView.dispatch_request", "args": ["*args", "**kwargs"], "description": "Subclasses have to override this method to implement the\nactual view function code. This method is called with all\nthe arguments from the URL rule.\n"}, -{"name": "FlaskGroup", "args": ["add_default_commands=True", "create_app=None", "add_version_option=True", "load_dotenv=True", "**extra"], "description": "Special subclass of the AppGroup group that supports\nloading more commands from the configured Flask app. Normally a\ndeveloper does not have to interface with this class but there are\nsome very advanced use cases for which it makes sense to create an\ninstance of this.\n\nFor information as of why this is useful see Custom Scripts.\n\n\nParameters:\nadd_default_commands \u2013 if this is True then the default run and\nshell commands wil be added.\nadd_version_option \u2013 adds the --version option.\ncreate_app \u2013 an optional callback that is passed the script info and\nreturns the loaded app.\nload_dotenv \u2013 Load the nearest .env and .flaskenv\nfiles to set environment variables. Will also change the working\ndirectory to the directory containing the first file found."}, -{"name": "FlaskGroup.get_command", "args": ["ctx", "name"], "description": "Given a context and a command name, this returns a\nCommand object if it exists or returns None.\n"}, -{"name": "FlaskGroup.list_commands", "args": ["ctx"], "description": "Returns a list of subcommand names in the order they should\nappear.\n"}, -{"name": "FlaskGroup.main", "args": ["*args", "**kwargs"], "description": "This is the way to invoke a script with all the bells and\nwhistles as a command line application. This will always terminate\nthe application after a call. If this is not wanted, SystemExit\nneeds to be caught.\nThis method is also available by directly calling the instance of\na Command.\n\nNew in version 3.0: Added the standalone_mode flag to control the standalone mode.\n\n\nChangelog\n\n\n\nParameters:\nargs \u2013 the arguments that should be used for parsing. If not\nprovided, sys.argv[1:] is used.\nprog_name \u2013 the program name that should be used. By default\nthe program name is constructed by taking the file\nname from sys.argv[0].\ncomplete_var \u2013 the environment variable that controls the\nbash completion support. The default is\n\"__COMPLETE\" with prog name in\nuppercase.\nstandalone_mode \u2013 the default behavior is to invoke the script\nin standalone mode. Click will then\nhandle exceptions and convert them into\nerror messages and the function will never\nreturn but shut down the interpreter. If\nthis is set to False they will be\npropagated to the caller and the return\nvalue of this function is the return value\nof invoke().\nextra \u2013 extra keyword arguments are forwarded to the context\nconstructor. See Context for more information.\n\n\n\n\n\n"}, -{"name": "AppGroup", "args": ["name=None", "commands=None", "**attrs"], "description": "This works similar to a regular click Group but it\nchanges the behavior of the command() decorator so that it\nautomatically wraps the functions in with_appcontext().\n\nNot to be confused with FlaskGroup.\n\n"}, -{"name": "AppGroup.command", "args": ["*args", "**kwargs"], "description": "This works exactly like the method of the same name on a regular\nclick.Group but it wraps callbacks in with_appcontext()\nunless it\u2019s disabled by passing with_appcontext=False.\n"}, -{"name": "AppGroup.group", "args": ["*args", "**kwargs"], "description": "This works exactly like the method of the same name on a regular\nclick.Group but it defaults the group class to\nAppGroup.\n"}, -{"name": "ScriptInfo", "args": ["app_import_path=None", "create_app=None"], "description": "Help object to deal with Flask applications. This is usually not\nnecessary to interface with as it\u2019s used internally in the dispatching\nto click. In future versions of Flask this object will most likely play\na bigger role. Typically it\u2019s created automatically by the\nFlaskGroup but you can also manually create it and pass it\nonwards as click object.\n\n"}, -{"name": "ScriptInfo.load_app", "args": [], "description": "Loads the Flask app (if not yet loaded) and returns it. Calling\nthis multiple times will just result in the already loaded app to\nbe returned.\n"}, -{"name": "ScriptInfo.app_import_path", "args": null, "description": "Optionally the import path for the Flask application.\n"}, -{"name": "ScriptInfo.create_app", "args": null, "description": "Optionally a function that is passed the script info to create\nthe instance of the application.\n"}, -{"name": "ScriptInfo.data", "args": null, "description": "A dictionary with arbitrary data that can be associated with\nthis script info.\n"}, -{"name": "has_request_context", "args": [], "description": "If you have code that wants to test if a request context is there or\nnot this function can be used. For instance, you may want to take advantage\nof request information if the request object is available, but fail\nsilently if it is unavailable.\nclass User(db.Model):\n\n def __init__(self, username, remote_addr=None):\n self.username = username\n if remote_addr is None and has_request_context():\n remote_addr = request.remote_addr\n self.remote_addr = remote_addr\n\n\nAlternatively you can also just test any of the context bound objects\n(such as request or g for truthness):\nclass User(db.Model):\n\n def __init__(self, username, remote_addr=None):\n self.username = username\n if remote_addr is None and request:\n remote_addr = request.remote_addr\n self.remote_addr = remote_addr\n\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "copy_current_request_context", "args": ["f"], "description": "A helper function that decorates a function to retain the current\nrequest context. This is useful when working with greenlets. The moment\nthe function is decorated a copy of the request context is created and\nthen pushed when the function is called.\nExample:\nimport gevent\nfrom flask import copy_current_request_context\n\n@app.route('/')\ndef index():\n @copy_current_request_context\n def do_some_work():\n # do some work here, it can access flask.request like you\n # would otherwise in the view function.\n ...\n gevent.spawn(do_some_work)\n return 'Regular response'\n\n\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "has_app_context", "args": [], "description": "Works like has_request_context() but for the application\ncontext. You can also just do a boolean check on the\ncurrent_app object instead.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "url_for", "args": ["endpoint", "**values"], "description": "Generates a URL to the given endpoint with the method provided.\nVariable arguments that are unknown to the target endpoint are appended\nto the generated URL as query arguments. If the value of a query argument\nis None, the whole pair is skipped. In case blueprints are active\nyou can shortcut references to the same blueprint by prefixing the\nlocal endpoint with a dot (.).\nThis will reference the index function local to the current blueprint:\nurl_for('.index')\n\n\nFor more information, head over to the Quickstart.\nTo integrate applications, Flask has a hook to intercept URL build\nerrors through Flask.url_build_error_handlers. The url_for\nfunction results in a BuildError when the current\napp does not have a URL for the given endpoint and values. When it does, the\ncurrent_app calls its url_build_error_handlers if\nit is not None, which can return a string to use as the result of\nurl_for (instead of url_for\u2019s default to raise the\nBuildError exception) or re-raise the exception.\nAn example:\ndef external_url_handler(error, endpoint, values):\n \"Looks up an external URL when `url_for` cannot build a URL.\"\n # This is an example of hooking the build_error_handler.\n # Here, lookup_url is some utility function you've built\n # which looks up the endpoint in some external URL registry.\n url = lookup_url(endpoint, **values)\n if url is None:\n # External lookup did not have a URL.\n # Re-raise the BuildError, in context of original traceback.\n exc_type, exc_value, tb = sys.exc_info()\n if exc_value is error:\n raise exc_type, exc_value, tb\n else:\n raise error\n # url_for will use this result, instead of raising BuildError.\n return url\n\napp.url_build_error_handlers.append(external_url_handler)\n\n\nHere, error is the instance of BuildError, and\nendpoint and values are the arguments passed into url_for. Note\nthat this is for building URLs outside the current application, and not for\nhandling 404 NotFound errors.\n\nChangelog\nNew in version 0.10: The _scheme parameter was added.\n\n\nNew in version 0.9: The _anchor and _method parameters were added.\n\n\nNew in version 0.9: Calls Flask.handle_build_error() on\nBuildError.\n\n\n\n\n\nParameters:\nendpoint \u2013 the endpoint of the URL (name of the function)\nvalues \u2013 the variable arguments of the URL rule\n_external \u2013 if set to True, an absolute URL is generated. Server\naddress can be changed via SERVER_NAME configuration variable which\ndefaults to localhost.\n_scheme \u2013 a string specifying the desired URL scheme. The _external\nparameter must be set to True or a ValueError is raised. The default\nbehavior uses the same scheme as the current request, or\nPREFERRED_URL_SCHEME from the app configuration if no\nrequest context is available. As of Werkzeug 0.10, this also can be set\nto an empty string to build protocol-relative URLs.\n_anchor \u2013 if provided this is added as anchor to the URL.\n_method \u2013 if provided this explicitly specifies an HTTP method.\n\n\n\n\n\n"}, -{"name": "abort", "args": ["status", "*args", "**kwargs"], "description": "Raises an HTTPException for the given status code or WSGI\napplication:\nabort(404) # 404 Not Found\nabort(Response('Hello World'))\n\n\nCan be passed a WSGI application or a status code. If a status code is\ngiven it\u2019s looked up in the list of exceptions and will raise that\nexception, if passed a WSGI application it will wrap it in a proxy WSGI\nexception and raise that:\nabort(404)\nabort(Response('Hello World'))\n\n\n"}, -{"name": "redirect", "args": ["location", "code=302", "Response=None"], "description": "Returns a response object (a WSGI application) that, if called,\nredirects the client to the target location. Supported codes are 301,\n302, 303, 305, and 307. 300 is not supported because it\u2019s not a real\nredirect and 304 because it\u2019s the answer for a request with a request\nwith defined If-Modified-Since headers.\n\nChangelog\nNew in version 0.10: The class used for the Response object can now be passed in.\n\n\nNew in version 0.6: The location can now be a unicode string that is encoded using\nthe iri_to_uri() function.\n\n\n\n\n\nParameters:\nlocation \u2013 the location the response should redirect to.\ncode \u2013 the redirect status code. defaults to 302.\nResponse (class) \u2013 a Response class to use when instantiating a\nresponse. The default is werkzeug.wrappers.Response if\nunspecified.\n\n\n\n\n\n"}, -{"name": "make_response", "args": ["*args"], "description": "Sometimes it is necessary to set additional headers in a view. Because\nviews do not have to return response objects but can return a value that\nis converted into a response object by Flask itself, it becomes tricky to\nadd headers to it. This function can be called instead of using a return\nand you will get a response object which you can use to attach headers.\nIf view looked like this and you want to add a new header:\ndef index():\n return render_template('index.html', foo=42)\n\n\nYou can now do something like this:\ndef index():\n response = make_response(render_template('index.html', foo=42))\n response.headers['X-Parachutes'] = 'parachutes are cool'\n return response\n\n\nThis function accepts the very same arguments you can return from a\nview function. This for example creates a response with a 404 error\ncode:\nresponse = make_response(render_template('not_found.html'), 404)\n\n\nThe other use case of this function is to force the return value of a\nview function into a response which is helpful with view\ndecorators:\nresponse = make_response(view_function())\nresponse.headers['X-Parachutes'] = 'parachutes are cool'\n\n\nInternally this function does the following things:\n\nif no arguments are passed, it creates a new response argument\nif one argument is passed, flask.Flask.make_response()\nis invoked with it.\nif more than one argument is passed, the arguments are passed\nto the flask.Flask.make_response() function as tuple.\n\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "after_this_request", "args": ["f"], "description": "Executes a function after this request. This is useful to modify\nresponse objects. The function is passed the response object and has\nto return the same or a new one.\nExample:\n@app.route('/')\ndef index():\n @after_this_request\n def add_header(response):\n response.headers['X-Foo'] = 'Parachute'\n return response\n return 'Hello World!'\n\n\nThis is more useful if a function other than the view function wants to\nmodify a response. For instance think of a decorator that wants to add\nsome headers without converting the return value into a response object.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "send_file", "args": ["filename_or_fp", "mimetype=None", "as_attachment=False", "attachment_filename=None", "add_etags=True", "cache_timeout=None", "conditional=False", "last_modified=None"], "description": "Sends the contents of a file to the client. This will use the\nmost efficient method available and configured. By default it will\ntry to use the WSGI server\u2019s file_wrapper support. Alternatively\nyou can set the application\u2019s use_x_sendfile attribute\nto True to directly emit an X-Sendfile header. This however\nrequires support of the underlying webserver for X-Sendfile.\nBy default it will try to guess the mimetype for you, but you can\nalso explicitly provide one. For extra security you probably want\nto send certain files as attachment (HTML for instance). The mimetype\nguessing requires a filename or an attachment_filename to be\nprovided.\nETags will also be attached automatically if a filename is provided. You\ncan turn this off by setting add_etags=False.\nIf conditional=True and filename is provided, this method will try to\nupgrade the response stream to support range requests. This will allow\nthe request to be answered with partial content response.\nPlease never pass filenames to this function from user sources;\nyou should use send_from_directory() instead.\n\nChanged in version 1.0: UTF-8 filenames, as specified in RFC 2231, are supported.\n\n\nChangelog\nChanged in version 0.12: The filename is no longer automatically inferred from file objects. If\nyou want to use automatic mimetype and etag support, pass a filepath via\nfilename_or_fp or attachment_filename.\n\n\nChanged in version 0.12: The attachment_filename is preferred over filename for MIME-type\ndetection.\n\n\nChanged in version 0.9: cache_timeout pulls its default from application config, when None.\n\n\nChanged in version 0.7: mimetype guessing and etag support for file objects was\ndeprecated because it was unreliable. Pass a filename if you are\nable to, otherwise attach an etag yourself. This functionality\nwill be removed in Flask 1.0\n\n\nNew in version 0.5: The add_etags, cache_timeout and conditional parameters were\nadded. The default behavior is now to attach etags.\n\n\nNew in version 0.2.\n\n\n\n\n\nParameters:\nfilename_or_fp \u2013 the filename of the file to send.\nThis is relative to the root_path\nif a relative path is specified.\nAlternatively a file object might be provided in\nwhich case X-Sendfile might not work and fall\nback to the traditional method. Make sure that the\nfile pointer is positioned at the start of data to\nsend before calling send_file().\nmimetype \u2013 the mimetype of the file if provided. If a file path is\ngiven, auto detection happens as fallback, otherwise an\nerror will be raised.\nas_attachment \u2013 set to True if you want to send this file with\na Content-Disposition: attachment header.\nattachment_filename \u2013 the filename for the attachment if it\ndiffers from the file\u2019s filename.\nadd_etags \u2013 set to False to disable attaching of etags.\nconditional \u2013 set to True to enable conditional responses.\ncache_timeout \u2013 the timeout in seconds for the headers. When None\n(default), this value is set by\nget_send_file_max_age() of\ncurrent_app.\nlast_modified \u2013 set the Last-Modified header to this value,\na datetime or timestamp.\nIf a file was passed, this overrides its mtime.\n\n\n\n\n\n"}, -{"name": "send_from_directory", "args": ["directory", "filename", "**options"], "description": "Send a file from a given directory with send_file(). This\nis a secure way to quickly expose static files from an upload folder\nor something similar.\nExample usage:\n@app.route('/uploads/')\ndef download_file(filename):\n return send_from_directory(app.config['UPLOAD_FOLDER'],\n filename, as_attachment=True)\n\n\n\nSending files and Performance\nIt is strongly recommended to activate either X-Sendfile support in\nyour webserver or (if no authentication happens) to tell the webserver\nto serve files for the given path on its own without calling into the\nweb application for improved performance.\n\n\nChangelog\nNew in version 0.5.\n\n\n\n\n\nParameters:\ndirectory \u2013 the directory where all the files are stored.\nfilename \u2013 the filename relative to that directory to\ndownload.\noptions \u2013 optional keyword arguments that are directly\nforwarded to send_file().\n\n\n\n\n\n"}, -{"name": "safe_join", "args": ["directory", "*pathnames"], "description": "Safely join directory and zero or more untrusted pathnames\ncomponents.\nExample usage:\n@app.route('/wiki/')\ndef wiki_page(filename):\n filename = safe_join(app.config['WIKI_FOLDER'], filename)\n with open(filename, 'rb') as fd:\n content = fd.read() # Read and process the file content...\n\n\n\n\n\n\nParameters:\ndirectory \u2013 the trusted base directory.\npathnames \u2013 the untrusted pathnames relative to that directory.\n\n\n\nRaises:NotFound if one or more passed\npaths fall out of its boundaries.\n\n\n\n\n"}, -{"name": "escape", "args": ["s"], "description": "Convert the characters &, <, >, \u2018, and \u201d in string s to HTML-safe\nsequences. Use this if you need to display text that might contain\nsuch characters in HTML. Marks return value as markup string.\n"}, -{"name": "flash", "args": ["message", "category='message'"], "description": "Flashes a message to the next request. In order to remove the\nflashed message from the session and to display it to the user,\nthe template has to call get_flashed_messages().\n\nChangelog\nChanged in version 0.3: category parameter added.\n\n\n\n\n\nParameters:\nmessage \u2013 the message to be flashed.\ncategory \u2013 the category for the message. The following values\nare recommended: 'message' for any kind of message,\n'error' for errors, 'info' for information\nmessages and 'warning' for warnings. However any\nkind of string can be used as category.\n\n\n\n\n\n"}, -{"name": "get_flashed_messages", "args": ["with_categories=False", "category_filter=[]"], "description": "Pulls all flashed messages from the session and returns them.\nFurther calls in the same request to the function will return\nthe same messages. By default just the messages are returned,\nbut when with_categories is set to True, the return value will\nbe a list of tuples in the form (category, message) instead.\nFilter the flashed messages to one or more categories by providing those\ncategories in category_filter. This allows rendering categories in\nseparate html blocks. The with_categories and category_filter\narguments are distinct:\n\nwith_categories controls whether categories are returned with message\ntext (True gives a tuple, where False gives just the message text).\ncategory_filter filters the messages down to only those matching the\nprovided categories.\n\nSee Message Flashing for examples.\n\nChangelog\nChanged in version 0.9: category_filter parameter added.\n\n\nChanged in version 0.3: with_categories parameter added.\n\n\n\n\n\nParameters:\nwith_categories \u2013 set to True to also receive categories.\ncategory_filter \u2013 whitelist of categories to limit return values\n\n\n\n\n\n"}, -{"name": "jsonify", "args": ["*args", "**kwargs"], "description": "This function wraps dumps() to add a few enhancements that make\nlife easier. It turns the JSON output into a Response\nobject with the application/json mimetype. For convenience, it\nalso converts multiple arguments into an array or multiple keyword arguments\ninto a dict. This means that both jsonify(1,2,3) and\njsonify([1,2,3]) serialize to [1,2,3].\nFor clarity, the JSON serialization behavior has the following differences\nfrom dumps():\n\nSingle argument: Passed straight through to dumps().\nMultiple arguments: Converted to an array before being passed to\ndumps().\nMultiple keyword arguments: Converted to a dict before being passed to\ndumps().\nBoth args and kwargs: Behavior undefined and will throw an exception.\n\nExample usage:\nfrom flask import jsonify\n\n@app.route('/_get_current_user')\ndef get_current_user():\n return jsonify(username=g.user.username,\n email=g.user.email,\n id=g.user.id)\n\n\nThis will send a JSON response like this to the browser:\n{\n \"username\": \"admin\",\n \"email\": \"admin@localhost\",\n \"id\": 42\n}\n\n\n\nChangelog\nChanged in version 0.11: Added support for serializing top-level arrays. This introduces a\nsecurity risk in ancient browsers. See JSON Security for details.\n\nThis function\u2019s response will be pretty printed if the\nJSONIFY_PRETTYPRINT_REGULAR config parameter is set to True or the\nFlask app is running in debug mode. Compressed (not pretty) formatting\ncurrently means no indents and no spaces after separators.\n\nChangelog\nNew in version 0.2.\n\n"}, -{"name": "dumps", "args": ["obj", "**kwargs"], "description": "Serialize obj to a JSON formatted str by using the application\u2019s\nconfigured encoder (json_encoder) if there is an\napplication on the stack.\nThis function can return unicode strings or ascii-only bytestrings by\ndefault which coerce into unicode strings automatically. That behavior by\ndefault is controlled by the JSON_AS_ASCII configuration variable\nand can be overridden by the simplejson ensure_ascii parameter.\n"}, -{"name": "dump", "args": ["obj", "fp", "**kwargs"], "description": "Like dumps() but writes into a file object.\n"}, -{"name": "loads", "args": ["s", "**kwargs"], "description": "Unserialize a JSON object from a string s by using the application\u2019s\nconfigured decoder (json_decoder) if there is an\napplication on the stack.\n"}, -{"name": "load", "args": ["fp", "**kwargs"], "description": "Like loads() but reads from a file object.\n"}, -{"name": "render_template", "args": ["template_name_or_list", "**context"], "description": "Renders a template from the template folder with the given\ncontext.\n\n\n\n\nParameters:\ntemplate_name_or_list \u2013 the name of the template to be\nrendered, or an iterable with template names\nthe first one existing will be rendered\ncontext \u2013 the variables that should be available in the\ncontext of the template.\n\n\n\n\n\n"}, -{"name": "render_template_string", "args": ["source", "**context"], "description": "Renders a template from the given template source string\nwith the given context. Template variables will be autoescaped.\n\n\n\n\nParameters:\nsource \u2013 the source code of the template to be\nrendered\ncontext \u2013 the variables that should be available in the\ncontext of the template.\n\n\n\n\n\n"}, -{"name": "get_template_attribute", "args": ["template_name", "attribute"], "description": "Loads a macro (or variable) a template exports. This can be used to\ninvoke a macro from within Python code. If you for example have a\ntemplate named _cider.html with the following contents:\n{% macro hello(name) %}Hello {{ name }}!{% endmacro %}\n\n\nYou can access this from Python code like this:\nhello = get_template_attribute('_cider.html', 'hello')\nreturn hello('World')\n\n\n\nChangelog\nNew in version 0.2.\n\n\n\n\n\nParameters:\ntemplate_name \u2013 the name of the template\nattribute \u2013 the name of the variable of macro to access\n\n\n\n\n\n"}, -{"name": "stream_with_context", "args": ["generator_or_function"], "description": "Request contexts disappear when the response is started on the server.\nThis is done for efficiency reasons and to make it less likely to encounter\nmemory leaks with badly written WSGI middlewares. The downside is that if\nyou are using streamed responses, the generator cannot access request bound\ninformation any more.\nThis function however can help you keep the context around for longer:\nfrom flask import stream_with_context, request, Response\n\n@app.route('/stream')\ndef streamed_response():\n @stream_with_context\n def generate():\n yield 'Hello '\n yield request.args['name']\n yield '!'\n return Response(generate())\n\n\nAlternatively it can also be used around a specific generator:\nfrom flask import stream_with_context, request, Response\n\n@app.route('/stream')\ndef streamed_response():\n def generate():\n yield 'Hello '\n yield request.args['name']\n yield '!'\n return Response(stream_with_context(generate()))\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "load_dotenv", "args": ["path=None"], "description": "Load \u201cdotenv\u201d files in order of precedence to set environment variables.\nIf an env var is already set it is not overwritten, so earlier files in the\nlist are preferred over later files.\nChanges the current working directory to the location of the first file\nfound, with the assumption that it is in the top level project directory\nand will be where the Python path should import local packages from.\nThis is a no-op if python-dotenv is not installed.\n\n\n\n\nParameters:path \u2013 Load the file at this location instead of searching.\n\nReturns:True if a file was loaded.\n\n\n\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "with_appcontext", "args": ["f"], "description": "Wraps a callback so that it\u2019s guaranteed to be executed with the\nscript\u2019s application context. If callbacks are registered directly\nto the app.cli object then they are wrapped with this function\nby default unless it\u2019s disabled.\n"}, -{"name": "pass_script_info", "args": ["f"], "description": "Marks a function so that an instance of ScriptInfo is passed\nas first argument to the click callback.\n"}, -{"name": "Flask", "args": ["import_name", "static_url_path=None", "static_folder='static'", "static_host=None", "host_matching=False", "subdomain_matching=False", "template_folder='templates'", "instance_path=None", "instance_relative_config=False", "root_path=None"], "description": "The flask object implements a WSGI application and acts as the central\nobject. It is passed the name of the module or package of the\napplication. Once it is created it will act as a central registry for\nthe view functions, the URL rules, template configuration and much more.\n\nThe name of the package is used to resolve resources from inside the\npackage or the folder the module is contained in depending on if the\npackage parameter resolves to an actual python package (a folder with\nan __init__.py file inside) or a standard module (just a .py file).\n\nFor more information about resource loading, see open_resource().\n\nUsually you create a Flask instance in your main module or\nin the __init__.py file of your package like this:\n\n\nParameters:\nimport_name \u2013 the name of the application package\nstatic_url_path \u2013 can be used to specify a different path for the\nstatic files on the web. Defaults to the name\nof the static_folder folder.\nstatic_folder \u2013 the folder with static files that should be served\nat static_url_path. Defaults to the 'static'\nfolder in the root path of the application.\nstatic_host \u2013 the host to use when adding the static route.\nDefaults to None. Required when using host_matching=True\nwith a static_folder configured.\nhost_matching \u2013 set url_map.host_matching attribute.\nDefaults to False.\nsubdomain_matching \u2013 consider the subdomain relative to\nSERVER_NAME when matching routes. Defaults to False.\ntemplate_folder \u2013 the folder that contains the templates that should\nbe used by the application. Defaults to\n'templates' folder in the root path of the\napplication.\ninstance_path \u2013 An alternative instance path for the application.\nBy default the folder 'instance' next to the\npackage or module is assumed to be the instance\npath.\ninstance_relative_config \u2013 if set to True relative filenames\nfor loading the config are assumed to\nbe relative to the instance path instead\nof the application root.\nroot_path \u2013 Flask by default will automatically calculate the path\nto the root of the application. In certain situations\nthis cannot be achieved (for instance if the package\nis a Python 3 namespace package) and needs to be\nmanually defined."}, -{"name": "Flask.add_template_filter", "args": ["f", "name=None"], "description": "Register a custom template filter. Works exactly like the\ntemplate_filter() decorator.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_template_global", "args": ["f", "name=None"], "description": "Register a custom template global function. Works exactly like the\ntemplate_global() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global function, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_template_test", "args": ["f", "name=None"], "description": "Register a custom template test. Works exactly like the\ntemplate_test() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "provide_automatic_options=None", "**options"], "description": "Connects a URL rule. Works exactly like the route()\ndecorator. If a view_func is provided it will be registered with the\nendpoint.\nBasically this example:\n@app.route('/')\ndef index():\n pass\n\n\nIs equivalent to the following:\ndef index():\n pass\napp.add_url_rule('/', 'index', index)\n\n\nIf the view_func is not provided you will need to connect the endpoint\nto a view function like so:\napp.view_functions['index'] = index\n\n\nInternally route() invokes add_url_rule() so if you want\nto customize the behavior via subclassing you only need to change\nthis method.\nFor more information refer to URL Route Registrations.\n\nChangelog\nChanged in version 0.6: OPTIONS is added automatically as method.\n\n\nChanged in version 0.2: view_func parameter added.\n\n\n\n\n\nParameters:\nrule \u2013 the URL rule as string\nendpoint \u2013 the endpoint for the registered URL rule. Flask\nitself assumes the name of the view function as\nendpoint\nview_func \u2013 the function to call when serving a request to the\nprovided endpoint\nprovide_automatic_options \u2013 controls whether the OPTIONS\nmethod should be added automatically. This can also be controlled\nby setting the view_func.provide_automatic_options = False\nbefore adding the rule.\noptions \u2013 the options to be forwarded to the underlying\nRule object. A change\nto Werkzeug is handling of method options. methods\nis a list of methods this rule should be limited\nto (GET, POST etc.). By default a rule\njust listens for GET (and implicitly HEAD).\nStarting with Flask 0.6, OPTIONS is implicitly\nadded and handled by the standard request handling.\n\n\n\n\n\n"}, -{"name": "Flask.after_request", "args": ["f"], "description": "Register a function to be run after each request.\nYour function must take one parameter, an instance of\nresponse_class and return a new response object or the\nsame (see process_response()).\nAs of Flask 0.7 this function might not be executed at the end of the\nrequest in case an unhandled exception occurred.\n"}, -{"name": "Flask.app_context", "args": [], "description": "Create an AppContext. Use as a with\nblock to push the context, which will make current_app\npoint at this application.\nAn application context is automatically pushed by\nRequestContext.push()\nwhen handling a request, and when running a CLI command. Use\nthis to manually create a context outside of these situations.\nwith app.app_context():\n init_db()\n\n\nSee The Application Context.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.auto_find_instance_path", "args": [], "description": "Tries to locate the instance path if it was not provided to the\nconstructor of the application class. It will basically calculate\nthe path to a folder named instance next to your main file or\nthe package.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_first_request", "args": ["f"], "description": "Registers a function to be run before the first request to this\ninstance of the application.\nThe function will be called without any arguments and its return\nvalue is ignored.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_request", "args": ["f"], "description": "Registers a function to run before each request.\nFor example, this can be used to open a database connection, or to load\nthe logged in user from the session.\nThe function will be called without any arguments. If it returns a\nnon-None value, the value is handled as if it was the return value from\nthe view, and further request handling is stopped.\n"}, -{"name": "Flask.context_processor", "args": ["f"], "description": "Registers a template context processor function.\n"}, -{"name": "Flask.create_global_jinja_loader", "args": [], "description": "Creates the loader for the Jinja2 environment. Can be used to\noverride just the loader and keeping the rest unchanged. It\u2019s\ndiscouraged to override this function. Instead one should override\nthe jinja_loader() function instead.\nThe global loader dispatches between the loaders of the application\nand the individual blueprints.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.create_jinja_environment", "args": [], "description": "Creates the Jinja2 environment based on jinja_options\nand select_jinja_autoescape(). Since 0.7 this also adds\nthe Jinja2 globals and filters after initialization. Override\nthis function to customize the behavior.\n\nChangelog\nChanged in version 0.11: Environment.auto_reload set in accordance with\nTEMPLATES_AUTO_RELOAD configuration option.\n\n\nNew in version 0.5.\n\n"}, -{"name": "Flask.create_url_adapter", "args": ["request"], "description": "Creates a URL adapter for the given request. The URL adapter\nis created at a point where the request context is not yet set\nup so the request is passed explicitly.\n\nChanged in version 1.0: SERVER_NAME no longer implicitly enables subdomain\nmatching. Use subdomain_matching instead.\n\n\nChangelog\nChanged in version 0.9: This can now also be called without a request object when the\nURL adapter is created for the application context.\n\n\nNew in version 0.6.\n\n"}, -{"name": "Flask.dispatch_request", "args": [], "description": "Does the request dispatching. Matches the URL and returns the\nreturn value of the view or error handler. This does not have to\nbe a response object. In order to convert the return value to a\nproper response object, call make_response().\n\nChangelog\nChanged in version 0.7: This no longer does the exception handling, this code was\nmoved to the new full_dispatch_request().\n\n"}, -{"name": "Flask.do_teardown_appcontext", "args": ["exc=<object object>"], "description": "Called right before the application context is popped.\nWhen handling a request, the application context is popped\nafter the request context. See do_teardown_request().\nThis calls all functions decorated with\nteardown_appcontext(). Then the\nappcontext_tearing_down signal is sent.\nThis is called by\nAppContext.pop().\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.do_teardown_request", "args": ["exc=<object object>"], "description": "Called after the request is dispatched and the response is\nreturned, right before the request context is popped.\nThis calls all functions decorated with\nteardown_request(), and Blueprint.teardown_request()\nif a blueprint handled the request. Finally, the\nrequest_tearing_down signal is sent.\nThis is called by\nRequestContext.pop(),\nwhich may be delayed during testing to maintain access to\nresources.\n\n\n\n\nParameters:exc \u2013 An unhandled exception raised while dispatching the\nrequest. Detected from the current exception information if\nnot passed. Passed to each teardown function.\n\n\n\n\nChangelog\nChanged in version 0.9: Added the exc argument.\n\n"}, -{"name": "Flask.endpoint", "args": ["endpoint"], "description": "A decorator to register a function as an endpoint.\nExample:\n@app.endpoint('example.endpoint')\ndef example():\n return \"example\"\n\n\n\n\n\n\nParameters:endpoint \u2013 the name of the endpoint\n\n\n\n"}, -{"name": "Flask.errorhandler", "args": ["code_or_exception"], "description": "Register a function to handle errors by code or exception class.\nA decorator that is used to register a function given an\nerror code. Example:\n@app.errorhandler(404)\ndef page_not_found(error):\n return 'This page does not exist', 404\n\n\nYou can also register handlers for arbitrary exceptions:\n@app.errorhandler(DatabaseError)\ndef special_exception_handler(error):\n return 'Database connection failed', 500\n\n\n\nChangelog\nNew in version 0.7: Use register_error_handler() instead of modifying\nerror_handler_spec directly, for application wide error\nhandlers.\n\n\nNew in version 0.7: One can now additionally also register custom exception types\nthat do not necessarily have to be a subclass of the\nHTTPException class.\n\n\n\n\n\nParameters:code_or_exception \u2013 the code as integer for the handler, or\nan arbitrary exception\n\n\n\n"}, -{"name": "Flask.full_dispatch_request", "args": [], "description": "Dispatches the request and on top of that performs request\npre and postprocessing as well as HTTP exception catching and\nerror handling.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.get_send_file_max_age", "args": ["filename"], "description": "Provides default cache_timeout for the send_file() functions.\nBy default, this function returns SEND_FILE_MAX_AGE_DEFAULT from\nthe configuration of current_app.\nStatic file functions such as send_from_directory() use this\nfunction, and send_file() calls this function on\ncurrent_app when the given cache_timeout is None. If a\ncache_timeout is given in send_file(), that timeout is used;\notherwise, this method is called.\nThis allows subclasses to change the behavior when sending files based\non the filename. For example, to set the cache timeout for .js files\nto 60 seconds:\nclass MyFlask(flask.Flask):\n def get_send_file_max_age(self, name):\n if name.lower().endswith('.js'):\n return 60\n return flask.Flask.get_send_file_max_age(self, name)\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.handle_exception", "args": ["e"], "description": "Default exception handling that kicks in when an exception\noccurs that is not caught. In debug mode the exception will\nbe re-raised immediately, otherwise it is logged and the handler\nfor a 500 internal server error is used. If no such handler\nexists, a default 500 internal server error message is displayed.\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.handle_http_exception", "args": ["e"], "description": "Handles an HTTP exception. By default this will invoke the\nregistered error handlers and fall back to returning the\nexception as response.\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.handle_url_build_error", "args": ["error", "endpoint", "values"], "description": "Handle BuildError on url_for().\n"}, -{"name": "Flask.handle_user_exception", "args": ["e"], "description": "This method is called whenever an exception occurs that should be\nhandled. A special case are\nHTTPExceptions which are forwarded by\nthis function to the handle_http_exception() method. This\nfunction will either return a response value or reraise the\nexception with the same traceback.\n\nChanged in version 1.0: Key errors raised from request data like form show the the bad\nkey in debug mode rather than a generic bad request message.\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.inject_url_defaults", "args": ["endpoint", "values"], "description": "Injects the URL defaults for the given endpoint directly into\nthe values dictionary passed. This is used internally and\nautomatically called on URL building.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.iter_blueprints", "args": [], "description": "Iterates over all blueprints by the order they were registered.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.log_exception", "args": ["exc_info"], "description": "Logs an exception. This is called by handle_exception()\nif debugging is disabled and right before the handler is called.\nThe default implementation logs the exception as error on the\nlogger.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.make_config", "args": ["instance_relative=False"], "description": "Used to create the config attribute by the Flask constructor.\nThe instance_relative parameter is passed in from the constructor\nof Flask (there named instance_relative_config) and indicates if\nthe config should be relative to the instance path or the root path\nof the application.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.make_default_options_response", "args": [], "description": "This method is called to create the default OPTIONS response.\nThis can be changed through subclassing to change the default\nbehavior of OPTIONS responses.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.make_null_session", "args": [], "description": "Creates a new instance of a missing session. Instead of overriding\nthis method we recommend replacing the session_interface.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.make_response", "args": ["rv"], "description": "Convert the return value from a view function to an instance of\nresponse_class.\n\n\n\n\nParameters:rv \u2013 the return value from the view function. The view function\nmust return a response. Returning None, or the view ending\nwithout returning, is not allowed. The following types are allowed\nfor view_rv:\n\nstr (unicode in Python 2)\nA response object is created with the string encoded to UTF-8\nas the body.\nbytes (str in Python 2)\nA response object is created with the bytes as the body.\ntuple\nEither (body, status, headers), (body, status), or\n(body, headers), where body is any of the other types\nallowed here, status is a string or an integer, and\nheaders is a dictionary or a list of (key, value)\ntuples. If body is a response_class instance,\nstatus overwrites the exiting value and headers are\nextended.\nresponse_class\nThe object is returned unchanged.\nother Response class\nThe object is coerced to response_class.\ncallable()\nThe function is called as a WSGI application. The result is\nused to create a response object.\n\n\n\n\n\n\nChangelog\nChanged in version 0.9: Previously a tuple was interpreted as the arguments for the\nresponse object.\n\n"}, -{"name": "Flask.make_shell_context", "args": [], "description": "Returns the shell context for an interactive shell for this\napplication. This runs all the registered shell context\nprocessors.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.open_instance_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s instance folder\n(instance_path). Otherwise works like\nopen_resource(). Instance resources can also be opened for\nwriting.\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Flask.open_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s resource folder. To see\nhow this works, consider the following folder structure:\n/myapplication.py\n/schema.sql\n/static\n /style.css\n/templates\n /layout.html\n /index.html\n\n\nIf you want to open the schema.sql file you would do the\nfollowing:\nwith app.open_resource('schema.sql') as f:\n contents = f.read()\n do_something_with(contents)\n\n\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Flask.open_session", "args": ["request"], "description": "Creates or opens a new session. Default implementation stores all\nsession data in a signed cookie. This requires that the\nsecret_key is set. Instead of overriding this method\nwe recommend replacing the session_interface.\n\n\n\n\nParameters:request \u2013 an instance of request_class.\n\n\n\n"}, -{"name": "Flask.preprocess_request", "args": [], "description": "Called before the request is dispatched. Calls\nurl_value_preprocessors registered with the app and the\ncurrent blueprint (if any). Then calls before_request_funcs\nregistered with the app and the blueprint.\nIf any before_request() handler returns a non-None value, the\nvalue is handled as if it was the return value from the view, and\nfurther request handling is stopped.\n"}, -{"name": "Flask.process_response", "args": ["response"], "description": "Can be overridden in order to modify the response object\nbefore it\u2019s sent to the WSGI server. By default this will\ncall all the after_request() decorated functions.\n\nChangelog\nChanged in version 0.5: As of Flask 0.5 the functions registered for after request\nexecution are called in reverse order of registration.\n\n\n\n\n\nParameters:response \u2013 a response_class object.\n\nReturns:a new response object or the same, has to be an\ninstance of response_class.\n\n\n\n"}, -{"name": "Flask.register_blueprint", "args": ["blueprint", "**options"], "description": "Register a Blueprint on the application. Keyword\narguments passed to this method will override the defaults set on the\nblueprint.\nCalls the blueprint\u2019s register() method after\nrecording the blueprint in the application\u2019s blueprints.\n\n\n\n\nParameters:\nblueprint \u2013 The blueprint to register.\nurl_prefix \u2013 Blueprint routes will be prefixed with this.\nsubdomain \u2013 Blueprint routes will match on this subdomain.\nurl_defaults \u2013 Blueprint routes will use these default values for\nview arguments.\noptions \u2013 Additional keyword arguments are passed to\nBlueprintSetupState. They can be\naccessed in record() callbacks.\n\n\n\n\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.register_error_handler", "args": ["code_or_exception", "f"], "description": "Alternative error attach function to the errorhandler()\ndecorator that is more straightforward to use for non decorator\nusage.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.request_context", "args": ["environ"], "description": "Create a RequestContext representing a\nWSGI environment. Use a with block to push the context,\nwhich will make request point at this request.\nSee The Request Context.\nTypically you should not call this from your own code. A request\ncontext is automatically pushed by the wsgi_app() when\nhandling a request. Use test_request_context() to create\nan environment and context instead of this method.\n\n\n\n\nParameters:environ \u2013 a WSGI environment\n\n\n\n"}, -{"name": "Flask.route", "args": ["rule", "**options"], "description": "A decorator that is used to register a view function for a\ngiven URL rule. This does the same thing as add_url_rule()\nbut is intended for decorator usage:\n@app.route('/')\ndef index():\n return 'Hello World'\n\n\nFor more information refer to URL Route Registrations.\n\n\n\n\nParameters:\nrule \u2013 the URL rule as string\nendpoint \u2013 the endpoint for the registered URL rule. Flask\nitself assumes the name of the view function as\nendpoint\noptions \u2013 the options to be forwarded to the underlying\nRule object. A change\nto Werkzeug is handling of method options. methods\nis a list of methods this rule should be limited\nto (GET, POST etc.). By default a rule\njust listens for GET (and implicitly HEAD).\nStarting with Flask 0.6, OPTIONS is implicitly\nadded and handled by the standard request handling.\n\n\n\n\n\n"}, -{"name": "Flask.run", "args": ["host=None", "port=None", "debug=None", "load_dotenv=True", "**options"], "description": "Runs the application on a local development server.\nDo not use run() in a production setting. It is not intended to\nmeet security and performance requirements for a production server.\nInstead, see Deployment Options for WSGI server recommendations.\nIf the debug flag is set the server will automatically reload\nfor code changes and show a debugger in case an exception happened.\nIf you want to run the application in debug mode, but disable the\ncode execution on the interactive debugger, you can pass\nuse_evalex=False as parameter. This will keep the debugger\u2019s\ntraceback screen active, but disable code execution.\nIt is not recommended to use this function for development with\nautomatic reloading as this is badly supported. Instead you should\nbe using the flask command line script\u2019s run support.\n\nKeep in Mind\nFlask will suppress any server error with a generic error page\nunless it is in debug mode. As such to enable just the\ninteractive debugger without the code reloading, you have to\ninvoke run() with debug=True and use_reloader=False.\nSetting use_debugger to True without being in debug mode\nwon\u2019t catch any exceptions because there won\u2019t be any to\ncatch.\n\n\n\n\n\nParameters:\nhost \u2013 the hostname to listen on. Set this to '0.0.0.0' to\nhave the server available externally as well. Defaults to\n'127.0.0.1' or the host in the SERVER_NAME config variable\nif present.\nport \u2013 the port of the webserver. Defaults to 5000 or the\nport defined in the SERVER_NAME config variable if present.\ndebug \u2013 if given, enable or disable debug mode. See\ndebug.\nload_dotenv \u2013 Load the nearest .env and .flaskenv\nfiles to set environment variables. Will also change the working\ndirectory to the directory containing the first file found.\noptions \u2013 the options to be forwarded to the underlying Werkzeug\nserver. See werkzeug.serving.run_simple() for more\ninformation.\n\n\n\n\n\n\nChanged in version 1.0: If installed, python-dotenv will be used to load environment\nvariables from .env and .flaskenv files.\nIf set, the FLASK_ENV and FLASK_DEBUG\nenvironment variables will override env and\ndebug.\nThreaded mode is enabled by default.\n\n\nChangelog\nChanged in version 0.10: The default port is now picked from the SERVER_NAME\nvariable.\n\n"}, -{"name": "Flask.save_session", "args": ["session", "response"], "description": "Saves the session if it needs updates. For the default\nimplementation, check open_session(). Instead of overriding this\nmethod we recommend replacing the session_interface.\n\n\n\n\nParameters:\nsession \u2013 the session to be saved (a\nSecureCookie\nobject)\nresponse \u2013 an instance of response_class\n\n\n\n\n\n"}, -{"name": "Flask.select_jinja_autoescape", "args": ["filename"], "description": "Returns True if autoescaping should be active for the given\ntemplate name. If no template name is given, returns True.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.send_static_file", "args": ["filename"], "description": "Function used internally to send static files from the static\nfolder to the browser.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.shell_context_processor", "args": ["f"], "description": "Registers a shell context processor function.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.should_ignore_error", "args": ["error"], "description": "This is called to figure out if an error should be ignored\nor not as far as the teardown system is concerned. If this\nfunction returns True then the teardown handlers will not be\npassed the error.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "Flask.teardown_appcontext", "args": ["f"], "description": "Registers a function to be called when the application context\nends. These functions are typically also called when the request\ncontext is popped.\nExample:\nctx = app.app_context()\nctx.push()\n...\nctx.pop()\n\n\nWhen ctx.pop() is executed in the above example, the teardown\nfunctions are called just before the app context moves from the\nstack of active contexts. This becomes relevant if you are using\nsuch constructs in tests.\nSince a request context typically also manages an application\ncontext it would also be called when you pop a request context.\nWhen a teardown function was called because of an unhandled exception\nit will be passed an error object. If an errorhandler() is\nregistered, it will handle the exception and the teardown will not\nreceive it.\nThe return values of teardown functions are ignored.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.teardown_request", "args": ["f"], "description": "Register a function to be run at the end of each request,\nregardless of whether there was an exception or not. These functions\nare executed when the request context is popped, even if not an\nactual request was performed.\nExample:\nctx = app.test_request_context()\nctx.push()\n...\nctx.pop()\n\n\nWhen ctx.pop() is executed in the above example, the teardown\nfunctions are called just before the request context moves from the\nstack of active contexts. This becomes relevant if you are using\nsuch constructs in tests.\nGenerally teardown functions must take every necessary step to avoid\nthat they will fail. If they do execute code that might fail they\nwill have to surround the execution of these code by try/except\nstatements and log occurring errors.\nWhen a teardown function was called because of an exception it will\nbe passed an error object.\nThe return values of teardown functions are ignored.\n\nDebug Note\nIn debug mode Flask will not tear down a request on an exception\nimmediately. Instead it will keep it alive so that the interactive\ndebugger can still access it. This behavior can be controlled\nby the PRESERVE_CONTEXT_ON_EXCEPTION configuration variable.\n\n"}, -{"name": "Flask.template_filter", "args": ["name=None"], "description": "A decorator that is used to register custom template filter.\nYou can specify a name for the filter, otherwise the function\nname will be used. Example:\n@app.template_filter()\ndef reverse(s):\n return s[::-1]\n\n\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.template_global", "args": ["name=None"], "description": "A decorator that is used to register a custom template global function.\nYou can specify a name for the global function, otherwise the function\nname will be used. Example:\n@app.template_global()\ndef double(n):\n return 2 * n\n\n\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global function, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.template_test", "args": ["name=None"], "description": "A decorator that is used to register custom template test.\nYou can specify a name for the test, otherwise the function\nname will be used. Example:\n@app.template_test()\ndef is_prime(n):\n if n == 2:\n return True\n for i in range(2, int(math.ceil(math.sqrt(n))) + 1):\n if n % i == 0:\n return False\n return True\n\n\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.test_cli_runner", "args": ["**kwargs"], "description": "Create a CLI runner for testing CLI commands.\nSee Testing CLI Commands.\nReturns an instance of test_cli_runner_class, by default\nFlaskCliRunner. The Flask app object is\npassed as the first argument.\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "Flask.test_client", "args": ["use_cookies=True", "**kwargs"], "description": "Creates a test client for this application. For information\nabout unit testing head over to Testing Flask Applications.\nNote that if you are testing for assertions or exceptions in your\napplication code, you must set app.testing = True in order for the\nexceptions to propagate to the test client. Otherwise, the exception\nwill be handled by the application (not visible to the test client) and\nthe only indication of an AssertionError or other exception will be a\n500 status code response to the test client. See the testing\nattribute. For example:\napp.testing = True\nclient = app.test_client()\n\n\nThe test client can be used in a with block to defer the closing down\nof the context until the end of the with block. This is useful if\nyou want to access the context locals for testing:\nwith app.test_client() as c:\n rv = c.get('/?vodka=42')\n assert request.args['vodka'] == '42'\n\n\nAdditionally, you may pass optional keyword arguments that will then\nbe passed to the application\u2019s test_client_class constructor.\nFor example:\nfrom flask.testing import FlaskClient\n\nclass CustomClient(FlaskClient):\n def __init__(self, *args, **kwargs):\n self._authentication = kwargs.pop(\"authentication\")\n super(CustomClient,self).__init__( *args, **kwargs)\n\napp.test_client_class = CustomClient\nclient = app.test_client(authentication='Basic ....')\n\n\nSee FlaskClient for more information.\n\nChangelog\nChanged in version 0.11: Added **kwargs to support passing additional keyword arguments to\nthe constructor of test_client_class.\n\n\nNew in version 0.7: The use_cookies parameter was added as well as the ability\nto override the client to be used by setting the\ntest_client_class attribute.\n\n\nChanged in version 0.4: added support for with block usage for the client.\n\n"}, -{"name": "Flask.test_request_context", "args": ["*args", "**kwargs"], "description": "Create a RequestContext for a WSGI\nenvironment created from the given values. This is mostly useful\nduring testing, where you may want to run a function that uses\nrequest data without dispatching a full request.\nSee The Request Context.\nUse a with block to push the context, which will make\nrequest point at the request for the created\nenvironment.\nwith test_request_context(...):\n generate_report()\n\n\nWhen using the shell, it may be easier to push and pop the\ncontext manually to avoid indentation.\nctx = app.test_request_context(...)\nctx.push()\n...\nctx.pop()\n\n\nTakes the same arguments as Werkzeug\u2019s\nEnvironBuilder, with some defaults from\nthe application. See the linked Werkzeug docs for most of the\navailable arguments. Flask-specific behavior is listed here.\n\n\n\n\nParameters:\npath \u2013 URL path being requested.\nbase_url \u2013 Base URL where the app is being served, which\npath is relative to. If not given, built from\nPREFERRED_URL_SCHEME, subdomain,\nSERVER_NAME, and APPLICATION_ROOT.\nsubdomain \u2013 Subdomain name to append to\nSERVER_NAME.\nurl_scheme \u2013 Scheme to use instead of\nPREFERRED_URL_SCHEME.\ndata \u2013 The request body, either as a string or a dict of\nform keys and values.\njson \u2013 If given, this is serialized as JSON and passed as\ndata. Also defaults content_type to\napplication/json.\nargs \u2013 other positional arguments passed to\nEnvironBuilder.\nkwargs \u2013 other keyword arguments passed to\nEnvironBuilder.\n\n\n\n\n\n"}, -{"name": "Flask.trap_http_exception", "args": ["e"], "description": "Checks if an HTTP exception should be trapped or not. By default\nthis will return False for all exceptions except for a bad request\nkey error if TRAP_BAD_REQUEST_ERRORS is set to True. It\nalso returns True if TRAP_HTTP_EXCEPTIONS is set to True.\nThis is called for all HTTP exceptions raised by a view function.\nIf it returns True for any exception the error handler for this\nexception is not called and it shows up as regular exception in the\ntraceback. This is helpful for debugging implicitly raised HTTP\nexceptions.\n\nChanged in version 1.0: Bad request errors are not trapped by default in debug mode.\n\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.update_template_context", "args": ["context"], "description": "Update the template context with some commonly used variables.\nThis injects request, session, config and g into the template\ncontext as well as everything template context processors want\nto inject. Note that the as of Flask 0.6, the original values\nin the context will not be overridden if a context processor\ndecides to return a value with the same key.\n\n\n\n\nParameters:context \u2013 the context as a dictionary that is updated in place\nto add extra variables.\n\n\n\n"}, -{"name": "Flask.url_defaults", "args": ["f"], "description": "Callback function for URL defaults for all view functions of the\napplication. It\u2019s called with the endpoint and values and should\nupdate the values passed in place.\n"}, -{"name": "Flask.url_value_preprocessor", "args": ["f"], "description": "Register a URL value preprocessor function for all view\nfunctions in the application. These functions will be called before the\nbefore_request() functions.\nThe function can modify the values captured from the matched url before\nthey are passed to the view. For example, this can be used to pop a\ncommon language code value and place it in g rather than pass it to\nevery view.\nThe function is passed the endpoint name and values dict. The return\nvalue is ignored.\n"}, -{"name": "Flask.wsgi_app", "args": ["environ", "start_response"], "description": "The actual WSGI application. This is not implemented in\n__call__() so that middlewares can be applied without\nlosing a reference to the app object. Instead of doing this:\napp = MyMiddleware(app)\n\n\nIt\u2019s a better idea to do this instead:\napp.wsgi_app = MyMiddleware(app.wsgi_app)\n\n\nThen you still have the original application object around and\ncan continue to call methods on it.\n\nChangelog\nChanged in version 0.7: Teardown events for the request and app contexts are called\neven if an unhandled error occurs. Other events may not be\ncalled depending on when an error occurs during dispatch.\nSee Callbacks and Errors.\n\n\n\n\n\nParameters:\nenviron \u2013 A WSGI environment.\nstart_response \u2013 A callable accepting a status code,\na list of headers, and an optional exception context to\nstart the response.\n\n\n\n\n\n"}, -{"name": "Flask.after_request_funcs", "args": null, "description": "A dictionary with lists of functions that should be called after\neach request. The key of the dictionary is the name of the blueprint\nthis function is active for, None for all requests. This can for\nexample be used to close database connections. To register a function\nhere, use the after_request() decorator.\n"}, -{"name": "Flask.app_ctx_globals_class", "args": null, "description": "alias of flask.ctx._AppCtxGlobals\n"}, -{"name": "Flask.before_first_request_funcs", "args": null, "description": "A list of functions that will be called at the beginning of the\nfirst request to this instance. To register a function, use the\nbefore_first_request() decorator.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_request_funcs", "args": null, "description": "A dictionary with lists of functions that will be called at the\nbeginning of each request. The key of the dictionary is the name of\nthe blueprint this function is active for, or None for all\nrequests. To register a function, use the before_request()\ndecorator.\n"}, -{"name": "Flask.blueprints", "args": null, "description": "all the attached blueprints in a dictionary by name. Blueprints\ncan be attached multiple times so this dictionary does not tell\nyou how often they got attached.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.cli", "args": null, "description": "The click command line context for this application. Commands\nregistered here show up in the flask command once the\napplication has been discovered. The default commands are\nprovided by Flask itself and can be overridden.\nThis is an instance of a click.Group object.\n"}, -{"name": "Flask.config", "args": null, "description": "The configuration dictionary as Config. This behaves\nexactly like a regular dictionary but supports additional methods\nto load a config from files.\n"}, -{"name": "Flask.config_class", "args": null, "description": "alias of flask.config.Config\n"}, -{"name": "Flask.debug", "args": null, "description": "Whether debug mode is enabled. When using flask run to start\nthe development server, an interactive debugger will be shown for\nunhandled exceptions, and the server will be reloaded when code\nchanges. This maps to the DEBUG config key. This is\nenabled when env is 'development' and is overridden\nby the FLASK_DEBUG environment variable. It may not behave as\nexpected if set in code.\nDo not enable debug mode when deploying in production.\nDefault: True if env is 'development', or\nFalse otherwise.\n"}, -{"name": "Flask.default_config", "args": null, "description": "Default configuration parameters.\n"}, -{"name": "Flask.env", "args": null, "description": "What environment the app is running in. Flask and extensions may\nenable behaviors based on the environment, such as enabling debug\nmode. This maps to the ENV config key. This is set by the\nFLASK_ENV environment variable and may not behave as\nexpected if set in code.\nDo not enable development when deploying in production.\nDefault: 'production'\n"}, -{"name": "Flask.error_handler_spec", "args": null, "description": "A dictionary of all registered error handlers. The key is None\nfor error handlers active on the application, otherwise the key is\nthe name of the blueprint. Each key points to another dictionary\nwhere the key is the status code of the http exception. The\nspecial key None points to a list of tuples where the first item\nis the class for the instance check and the second the error handler\nfunction.\nTo register an error handler, use the errorhandler()\ndecorator.\n"}, -{"name": "Flask.extensions", "args": null, "description": "a place where extensions can store application specific state. For\nexample this is where an extension could store database engines and\nsimilar things. For backwards compatibility extensions should register\nthemselves like this:\nif not hasattr(app, 'extensions'):\n app.extensions = {}\napp.extensions['extensionname'] = SomeObject()\n\n\nThe key must match the name of the extension module. For example in\ncase of a \u201cFlask-Foo\u201d extension in flask_foo, the key would be\n'foo'.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.got_first_request", "args": null, "description": "This attribute is set to True if the application started\nhandling the first request.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.has_static_folder", "args": null, "description": "This is True if the package bound object\u2019s container has a\nfolder for static files.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.import_name", "args": null, "description": "The name of the package or module that this app belongs to. Do not\nchange this once it is set by the constructor.\n"}, -{"name": "Flask.instance_path", "args": null, "description": "Holds the path to the instance folder.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.jinja_env", "args": null, "description": "The Jinja2 environment used to load templates.\n"}, -{"name": "Flask.jinja_environment", "args": null, "description": "alias of flask.templating.Environment\n"}, -{"name": "Flask.jinja_loader", "args": null, "description": "The Jinja loader for this package bound object.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.jinja_options", "args": null, "description": "Options that are passed directly to the Jinja2 environment.\n"}, -{"name": "Flask.json_decoder", "args": null, "description": "alias of flask.json.JSONDecoder\n"}, -{"name": "Flask.json_encoder", "args": null, "description": "alias of flask.json.JSONEncoder\n"}, -{"name": "Flask.logger", "args": null, "description": "The 'flask.app' logger, a standard Python\nLogger.\nIn debug mode, the logger\u2019s level will be set\nto DEBUG.\nIf there are no handlers configured, a default handler will be added.\nSee Logging for more information.\n\nChanged in version 1.0: Behavior was simplified. The logger is always named\nflask.app. The level is only set during configuration, it\ndoesn\u2019t check app.debug each time. Only one format is used,\nnot different ones depending on app.debug. No handlers are\nremoved, and a handler is only added if no handlers are already\nconfigured.\n\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.name", "args": null, "description": "The name of the application. This is usually the import name\nwith the difference that it\u2019s guessed from the run file if the\nimport name is main. This name is used as a display name when\nFlask needs the name of the application. It can be set and overridden\nto change the value.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.permanent_session_lifetime", "args": null, "description": "A timedelta which is used to set the expiration\ndate of a permanent session. The default is 31 days which makes a\npermanent session survive for roughly one month.\nThis attribute can also be configured from the config with the\nPERMANENT_SESSION_LIFETIME configuration key. Defaults to\ntimedelta(days=31)\n"}, -{"name": "Flask.preserve_context_on_exception", "args": null, "description": "Returns the value of the PRESERVE_CONTEXT_ON_EXCEPTION\nconfiguration value in case it\u2019s set, otherwise a sensible default\nis returned.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.propagate_exceptions", "args": null, "description": "Returns the value of the PROPAGATE_EXCEPTIONS configuration\nvalue in case it\u2019s set, otherwise a sensible default is returned.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.request_class", "args": null, "description": "alias of flask.wrappers.Request\n"}, -{"name": "Flask.response_class", "args": null, "description": "alias of flask.wrappers.Response\n"}, -{"name": "Flask.root_path", "args": null, "description": "Absolute path to the package on the filesystem. Used to look up\nresources contained in the package.\n"}, -{"name": "Flask.secret_key", "args": null, "description": "If a secret key is set, cryptographic components can use this to\nsign cookies and other things. Set this to a complex random value\nwhen you want to use the secure cookie for instance.\nThis attribute can also be configured from the config with the\nSECRET_KEY configuration key. Defaults to None.\n"}, -{"name": "Flask.send_file_max_age_default", "args": null, "description": "A timedelta which is used as default cache_timeout\nfor the send_file() functions. The default is 12 hours.\nThis attribute can also be configured from the config with the\nSEND_FILE_MAX_AGE_DEFAULT configuration key. This configuration\nvariable can also be set with an integer value used as seconds.\nDefaults to timedelta(hours=12)\n"}, -{"name": "Flask.session_cookie_name", "args": null, "description": "The secure cookie uses this for the name of the session cookie.\nThis attribute can also be configured from the config with the\nSESSION_COOKIE_NAME configuration key. Defaults to 'session'\n"}, -{"name": "Flask.session_interface", "args": null, "description": "the session interface to use. By default an instance of\nSecureCookieSessionInterface is used here.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.shell_context_processors", "args": null, "description": "A list of shell context processor functions that should be run\nwhen a shell context is created.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.static_folder", "args": null, "description": "The absolute path to the configured static folder.\n"}, -{"name": "Flask.static_url_path", "args": null, "description": "The URL prefix that the static route will be registered for.\n"}, -{"name": "Flask.teardown_appcontext_funcs", "args": null, "description": "A list of functions that are called when the application context\nis destroyed. Since the application context is also torn down\nif the request ends this is the place to store code that disconnects\nfrom databases.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.teardown_request_funcs", "args": null, "description": "A dictionary with lists of functions that are called after\neach request, even if an exception has occurred. The key of the\ndictionary is the name of the blueprint this function is active for,\nNone for all requests. These functions are not allowed to modify\nthe request, and their return values are ignored. If an exception\noccurred while processing the request, it gets passed to each\nteardown_request function. To register a function here, use the\nteardown_request() decorator.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.template_context_processors", "args": null, "description": "A dictionary with list of functions that are called without argument\nto populate the template context. The key of the dictionary is the\nname of the blueprint this function is active for, None for all\nrequests. Each returns a dictionary that the template context is\nupdated with. To register a function here, use the\ncontext_processor() decorator.\n"}, -{"name": "Flask.template_folder", "args": null, "description": "Location of the template files to be added to the template lookup.\nNone if templates should not be added.\n"}, -{"name": "Flask.templates_auto_reload", "args": null, "description": "Reload templates when they are changed. Used by\ncreate_jinja_environment().\nThis attribute can be configured with TEMPLATES_AUTO_RELOAD. If\nnot set, it will be enabled in debug mode.\n\nNew in version 1.0: This property was added but the underlying config and behavior\nalready existed.\n\n\nChangelog"}, -{"name": "Flask.test_cli_runner_class", "args": null, "description": "The CliRunner subclass, by default\nFlaskCliRunner that is used by\ntest_cli_runner(). Its __init__ method should take a\nFlask app object as the first argument.\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "Flask.test_client_class", "args": null, "description": "the test client that is used with when test_client is used.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.testing", "args": null, "description": "The testing flag. Set this to True to enable the test mode of\nFlask extensions (and in the future probably also Flask itself).\nFor example this might activate test helpers that have an\nadditional runtime cost which should not be enabled by default.\nIf this is enabled and PROPAGATE_EXCEPTIONS is not changed from the\ndefault it\u2019s implicitly enabled.\nThis attribute can also be configured from the config with the\nTESTING configuration key. Defaults to False.\n"}, -{"name": "Flask.url_build_error_handlers", "args": null, "description": "A list of functions that are called when url_for() raises a\nBuildError. Each function registered here\nis called with error, endpoint and values. If a function\nreturns None or raises a BuildError the next function is\ntried.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.url_default_functions", "args": null, "description": "A dictionary with lists of functions that can be used as URL value\npreprocessors. The key None here is used for application wide\ncallbacks, otherwise the key is the name of the blueprint.\nEach of these functions has the chance to modify the dictionary\nof URL values before they are used as the keyword arguments of the\nview function. For each function registered this one should also\nprovide a url_defaults() function that adds the parameters\nautomatically again that were removed that way.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.url_map", "args": null, "description": "The Map for this instance. You can use\nthis to change the routing converters after the class was created\nbut before any routes are connected. Example:\nfrom werkzeug.routing import BaseConverter\n\nclass ListConverter(BaseConverter):\n def to_python(self, value):\n return value.split(',')\n def to_url(self, values):\n return ','.join(super(ListConverter, self).to_url(value)\n for value in values)\n\napp = Flask(__name__)\napp.url_map.converters['list'] = ListConverter\n\n\n"}, -{"name": "Flask.url_rule_class", "args": null, "description": "alias of werkzeug.routing.Rule\n"}, -{"name": "Flask.url_value_preprocessors", "args": null, "description": "A dictionary with lists of functions that are called before the\nbefore_request_funcs functions. The key of the dictionary is\nthe name of the blueprint this function is active for, or None\nfor all requests. To register a function, use\nurl_value_preprocessor().\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.use_x_sendfile", "args": null, "description": "Enable this if you want to use the X-Sendfile feature. Keep in\nmind that the server has to support this. This only affects files\nsent with the send_file() method.\n\nChangelog\nNew in version 0.2.\n\nThis attribute can also be configured from the config with the\nUSE_X_SENDFILE configuration key. Defaults to False.\n"}, -{"name": "Flask.view_functions", "args": null, "description": "A dictionary of all view functions registered. The keys will\nbe function names which are also used to generate URLs and\nthe values are the function objects themselves.\nTo register a view function, use the route() decorator.\n"}, -{"name": "Blueprint", "args": ["name", "import_name", "static_folder=None", "static_url_path=None", "template_folder=None", "url_prefix=None", "subdomain=None", "url_defaults=None", "root_path=None"], "description": "Represents a blueprint. A blueprint is an object that records\nfunctions that will be called with the\nBlueprintSetupState later to register functions\nor other things on the main application. See Modular Applications with Blueprints for more\ninformation.\n\n"}, -{"name": "Blueprint.add_app_template_filter", "args": ["f", "name=None"], "description": "Register a custom template filter, available application wide. Like\nFlask.add_template_filter() but for a blueprint. Works exactly\nlike the app_template_filter() decorator.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_app_template_global", "args": ["f", "name=None"], "description": "Register a custom template global, available application wide. Like\nFlask.add_template_global() but for a blueprint. Works exactly\nlike the app_template_global() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_app_template_test", "args": ["f", "name=None"], "description": "Register a custom template test, available application wide. Like\nFlask.add_template_test() but for a blueprint. Works exactly\nlike the app_template_test() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "**options"], "description": "Like Flask.add_url_rule() but for a blueprint. The endpoint for\nthe url_for() function is prefixed with the name of the blueprint.\n"}, -{"name": "Blueprint.after_app_request", "args": ["f"], "description": "Like Flask.after_request() but for a blueprint. Such a function\nis executed after each request, even if outside of the blueprint.\n"}, -{"name": "Blueprint.after_request", "args": ["f"], "description": "Like Flask.after_request() but for a blueprint. This function\nis only executed after each request that is handled by a function of\nthat blueprint.\n"}, -{"name": "Blueprint.app_context_processor", "args": ["f"], "description": "Like Flask.context_processor() but for a blueprint. Such a\nfunction is executed each request, even if outside of the blueprint.\n"}, -{"name": "Blueprint.app_errorhandler", "args": ["code"], "description": "Like Flask.errorhandler() but for a blueprint. This\nhandler is used for all requests, even if outside of the blueprint.\n"}, -{"name": "Blueprint.app_template_filter", "args": ["name=None"], "description": "Register a custom template filter, available application wide. Like\nFlask.template_filter() but for a blueprint.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_template_global", "args": ["name=None"], "description": "Register a custom template global, available application wide. Like\nFlask.template_global() but for a blueprint.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_template_test", "args": ["name=None"], "description": "Register a custom template test, available application wide. Like\nFlask.template_test() but for a blueprint.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_url_defaults", "args": ["f"], "description": "Same as url_defaults() but application wide.\n"}, -{"name": "Blueprint.app_url_value_preprocessor", "args": ["f"], "description": "Same as url_value_preprocessor() but application wide.\n"}, -{"name": "Blueprint.before_app_first_request", "args": ["f"], "description": "Like Flask.before_first_request(). Such a function is\nexecuted before the first request to the application.\n"}, -{"name": "Blueprint.before_app_request", "args": ["f"], "description": "Like Flask.before_request(). Such a function is executed\nbefore each request, even if outside of a blueprint.\n"}, -{"name": "Blueprint.before_request", "args": ["f"], "description": "Like Flask.before_request() but for a blueprint. This function\nis only executed before each request that is handled by a function of\nthat blueprint.\n"}, -{"name": "Blueprint.context_processor", "args": ["f"], "description": "Like Flask.context_processor() but for a blueprint. This\nfunction is only executed for requests handled by a blueprint.\n"}, -{"name": "Blueprint.endpoint", "args": ["endpoint"], "description": "Like Flask.endpoint() but for a blueprint. This does not\nprefix the endpoint with the blueprint name, this has to be done\nexplicitly by the user of this method. If the endpoint is prefixed\nwith a . it will be registered to the current blueprint, otherwise\nit\u2019s an application independent endpoint.\n"}, -{"name": "Blueprint.errorhandler", "args": ["code_or_exception"], "description": "Registers an error handler that becomes active for this blueprint\nonly. Please be aware that routing does not happen local to a\nblueprint so an error handler for 404 usually is not handled by\na blueprint unless it is caused inside a view function. Another\nspecial case is the 500 internal server error which is always looked\nup from the application.\nOtherwise works as the errorhandler() decorator\nof the Flask object.\n"}, -{"name": "Blueprint.get_send_file_max_age", "args": ["filename"], "description": "Provides default cache_timeout for the send_file() functions.\nBy default, this function returns SEND_FILE_MAX_AGE_DEFAULT from\nthe configuration of current_app.\nStatic file functions such as send_from_directory() use this\nfunction, and send_file() calls this function on\ncurrent_app when the given cache_timeout is None. If a\ncache_timeout is given in send_file(), that timeout is used;\notherwise, this method is called.\nThis allows subclasses to change the behavior when sending files based\non the filename. For example, to set the cache timeout for .js files\nto 60 seconds:\nclass MyFlask(flask.Flask):\n def get_send_file_max_age(self, name):\n if name.lower().endswith('.js'):\n return 60\n return flask.Flask.get_send_file_max_age(self, name)\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Blueprint.make_setup_state", "args": ["app", "options", "first_registration=False"], "description": "Creates an instance of BlueprintSetupState()\nobject that is later passed to the register callback functions.\nSubclasses can override this to return a subclass of the setup state.\n"}, -{"name": "Blueprint.open_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s resource folder. To see\nhow this works, consider the following folder structure:\n/myapplication.py\n/schema.sql\n/static\n /style.css\n/templates\n /layout.html\n /index.html\n\n\nIf you want to open the schema.sql file you would do the\nfollowing:\nwith app.open_resource('schema.sql') as f:\n contents = f.read()\n do_something_with(contents)\n\n\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Blueprint.record", "args": ["func"], "description": "Registers a function that is called when the blueprint is\nregistered on the application. This function is called with the\nstate as argument as returned by the make_setup_state()\nmethod.\n"}, -{"name": "Blueprint.record_once", "args": ["func"], "description": "Works like record() but wraps the function in another\nfunction that will ensure the function is only called once. If the\nblueprint is registered a second time on the application, the\nfunction passed is not called.\n"}, -{"name": "Blueprint.register", "args": ["app", "options", "first_registration=False"], "description": "Called by Flask.register_blueprint() to register all views\nand callbacks registered on the blueprint with the application. Creates\na BlueprintSetupState and calls each record() callback\nwith it.\n\n\n\n\nParameters:\napp \u2013 The application this blueprint is being registered with.\noptions \u2013 Keyword arguments forwarded from\nregister_blueprint().\nfirst_registration \u2013 Whether this is the first time this\nblueprint has been registered on the application.\n\n\n\n\n\n"}, -{"name": "Blueprint.register_error_handler", "args": ["code_or_exception", "f"], "description": "Non-decorator version of the errorhandler() error attach\nfunction, akin to the register_error_handler()\napplication-wide function of the Flask object but\nfor error handlers limited to this blueprint.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Blueprint.route", "args": ["rule", "**options"], "description": "Like Flask.route() but for a blueprint. The endpoint for the\nurl_for() function is prefixed with the name of the blueprint.\n"}, -{"name": "Blueprint.send_static_file", "args": ["filename"], "description": "Function used internally to send static files from the static\nfolder to the browser.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.teardown_app_request", "args": ["f"], "description": "Like Flask.teardown_request() but for a blueprint. Such a\nfunction is executed when tearing down each request, even if outside of\nthe blueprint.\n"}, -{"name": "Blueprint.teardown_request", "args": ["f"], "description": "Like Flask.teardown_request() but for a blueprint. This\nfunction is only executed when tearing down requests handled by a\nfunction of that blueprint. Teardown request functions are executed\nwhen the request context is popped, even when no actual request was\nperformed.\n"}, -{"name": "Blueprint.url_defaults", "args": ["f"], "description": "Callback function for URL defaults for this blueprint. It\u2019s called\nwith the endpoint and values and should update the values passed\nin place.\n"}, -{"name": "Blueprint.url_value_preprocessor", "args": ["f"], "description": "Registers a function as URL value preprocessor for this\nblueprint. It\u2019s called before the view functions are called and\ncan modify the url values provided.\n"}, -{"name": "Blueprint.has_static_folder", "args": null, "description": "This is True if the package bound object\u2019s container has a\nfolder for static files.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.import_name", "args": null, "description": "The name of the package or module that this app belongs to. Do not\nchange this once it is set by the constructor.\n"}, -{"name": "Blueprint.jinja_loader", "args": null, "description": "The Jinja loader for this package bound object.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.json_decoder", "args": null, "description": "Blueprint local JSON decoder class to use.\nSet to None to use the app\u2019s json_decoder.\n"}, -{"name": "Blueprint.json_encoder", "args": null, "description": "Blueprint local JSON decoder class to use.\nSet to None to use the app\u2019s json_encoder.\n"}, -{"name": "Blueprint.root_path", "args": null, "description": "Absolute path to the package on the filesystem. Used to look up\nresources contained in the package.\n"}, -{"name": "Blueprint.static_folder", "args": null, "description": "The absolute path to the configured static folder.\n"}, -{"name": "Blueprint.static_url_path", "args": null, "description": "The URL prefix that the static route will be registered for.\n"}, -{"name": "Blueprint.template_folder", "args": null, "description": "Location of the template files to be added to the template lookup.\nNone if templates should not be added.\n"}, -{"name": "Request", "args": ["environ", "populate_request=True", "shallow=False"], "description": "The request object used by default in Flask. Remembers the\nmatched endpoint and view arguments.\n\nIt is what ends up as request. If you want to replace\nthe request object used you can subclass this and set\nrequest_class to your subclass.\n\nThe request object is a Request subclass and\nprovides all of the attributes Werkzeug defines plus a few Flask\nspecific ones.\n\n"}, -{"name": "Request.close", "args": [], "description": "Closes associated resources of this request object. This\ncloses all file handles explicitly. You can also use the request\nobject in a with statement which will automatically close it.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.get_data", "args": ["cache=True", "as_text=False", "parse_form_data=False"], "description": "This reads the buffered incoming data from the client into one\nbytestring. By default this is cached but that behavior can be\nchanged by setting cache to False.\nUsually it\u2019s a bad idea to call this method without checking the\ncontent length first as a client could send dozens of megabytes or more\nto cause memory problems on the server.\nNote that if the form data was already parsed this method will not\nreturn anything as form data parsing does not cache the data like\nthis method does. To implicitly invoke form data parsing function\nset parse_form_data to True. When this is done the return value\nof this method will be an empty string if the form parser handles\nthe data. This generally is not necessary as if the whole data is\ncached (which is the default) the form parser will used the cached\ndata to parse the form data. Please be generally aware of checking\nthe content length first in any case before calling this method\nto avoid exhausting server memory.\nIf as_text is set to True the return value will be a decoded\nunicode string.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.get_json", "args": ["force=False", "silent=False", "cache=True", "application/json"], "description": "Parse and return the data as JSON. If the mimetype does not\nindicate JSON (application/json, see\nis_json()), this returns None unless force is\ntrue. If parsing fails, on_json_loading_failed() is called\nand its return value is used as the return value.\n\n\n\n\nParameters:\nforce \u2013 Ignore the mimetype and always try to parse JSON.\nsilent \u2013 Silence parsing errors and return None\ninstead.\ncache \u2013 Store the parsed JSON to return for subsequent\ncalls.\n\n\n\n\n\n"}, -{"name": "Request.make_form_data_parser", "args": [], "description": "Creates the form data parser. Instantiates the\nform_data_parser_class with some parameters.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Request.on_json_loading_failed", "args": ["e"], "description": "Called if get_json() parsing fails and isn\u2019t silenced. If\nthis method returns a value, it is used as the return value for\nget_json(). The default implementation raises a\nBadRequest exception.\n\nChangelog\nChanged in version 0.10: Raise a BadRequest error instead of returning an error\nmessage as JSON. If you want that behavior you can add it by\nsubclassing.\n\n\nNew in version 0.8.\n\n"}, -{"name": "Request.environ", "args": null, "description": "The underlying WSGI environment.\n"}, -{"name": "Request.path", "args": null, "description": ""}, -{"name": "Request.full_path", "args": null, "description": ""}, -{"name": "Request.script_root", "args": null, "description": ""}, -{"name": "Request.url", "args": null, "description": ""}, -{"name": "Request.base_url", "args": null, "description": ""}, -{"name": "Request.url_root", "args": null, "description": "Provides different ways to look at the current IRI. Imagine your application is\nlistening on the following application root:\nhttp://www.example.com/myapplication\n\n\nAnd a user requests the following URI:\nhttp://www.example.com/myapplication/%CF%80/page.html?x=y\n\n\nIn this case the values of the above mentioned attributes would be\nthe following:\n\n\n\n\n\n\npath\nu'/\u03c0/page.html'\n\nfull_path\nu'/\u03c0/page.html?x=y'\n\nscript_root\nu'/myapplication'\n\nbase_url\nu'http://www.example.com/myapplication/\u03c0/page.html'\n\nurl\nu'http://www.example.com/myapplication/\u03c0/page.html?x=y'\n\nurl_root\nu'http://www.example.com/myapplication/'\n\n\n\n"}, -{"name": "Request.accept_charsets", "args": null, "description": "List of charsets this client supports as\nCharsetAccept object.\n"}, -{"name": "Request.accept_encodings", "args": null, "description": "List of encodings this client accepts. Encodings in a HTTP term\nare compression encodings such as gzip. For charsets have a look at\naccept_charset.\n"}, -{"name": "Request.accept_languages", "args": null, "description": "List of languages this client accepts as\nLanguageAccept object.\n"}, -{"name": "Request.accept_mimetypes", "args": null, "description": "List of mimetypes this client supports as\nMIMEAccept object.\n"}, -{"name": "Request.access_route", "args": null, "description": "If a forwarded header exists this is a list of all ip addresses\nfrom the client ip to the last proxy server.\n"}, -{"name": "Request.args", "args": null, "description": "The parsed URL parameters (the part in the URL after the question\nmark).\nBy default an\nImmutableMultiDict\nis returned from this function. This can be changed by setting\nparameter_storage_class to a different type. This might\nbe necessary if the order of the form data is important.\n"}, -{"name": "Request.authorization", "args": null, "description": "The Authorization object in parsed form.\n"}, -{"name": "Request.base_url", "args": null, "description": "Like url but without the querystring\nSee also: trusted_hosts.\n"}, -{"name": "Request.blueprint", "args": null, "description": "The name of the current blueprint\n"}, -{"name": "Request.cache_control", "args": null, "description": "A RequestCacheControl object\nfor the incoming cache control headers.\n"}, -{"name": "Request.content_encoding", "args": null, "description": "The Content-Encoding entity-header field is used as a modifier to the\nmedia-type. When present, its value indicates what additional content\ncodings have been applied to the entity-body, and thus what decoding\nmechanisms must be applied in order to obtain the media-type\nreferenced by the Content-Type header field.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.content_length", "args": null, "description": "The Content-Length entity-header field indicates the size of the\nentity-body in bytes or, in the case of the HEAD method, the size of\nthe entity-body that would have been sent had the request been a\nGET.\n"}, -{"name": "Request.content_md5", "args": null, "description": "\nThe Content-MD5 entity-header field, as defined in RFC 1864, is an\nMD5 digest of the entity-body for the purpose of providing an\nend-to-end message integrity check (MIC) of the entity-body. (Note:\na MIC is good for detecting accidental modification of the\nentity-body in transit, but is not proof against malicious attacks.)\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.content_type", "args": null, "description": "The Content-Type entity-header field indicates the media type of\nthe entity-body sent to the recipient or, in the case of the HEAD\nmethod, the media type that would have been sent had the request\nbeen a GET.\n"}, -{"name": "Request.cookies", "args": null, "description": "A dict with the contents of all cookies transmitted with\nthe request.\n"}, -{"name": "Request.data", "args": null, "description": "Contains the incoming request data as string in case it came with\na mimetype Werkzeug does not handle.\n"}, -{"name": "Request.date", "args": null, "description": "The Date general-header field represents the date and time at which\nthe message was originated, having the same semantics as orig-date\nin RFC 822.\n"}, -{"name": "Request.dict_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableTypeConversionDict\n"}, -{"name": "Request.endpoint", "args": null, "description": "The endpoint that matched the request. This in combination with\nview_args can be used to reconstruct the same or a\nmodified URL. If an exception happened when matching, this will\nbe None.\n"}, -{"name": "Request.files", "args": null, "description": "MultiDict object containing\nall uploaded files. Each key in files is the name from the\n. Each value in files is a\nWerkzeug FileStorage object.\nIt basically behaves like a standard file object you know from Python,\nwith the difference that it also has a\nsave() function that can\nstore the file on the filesystem.\nNote that files will only contain data if the request method was\nPOST, PUT or PATCH and the that posted to the request had\nenctype=\"multipart/form-data\". It will be empty otherwise.\nSee the MultiDict /\nFileStorage documentation for\nmore details about the used data structure.\n"}, -{"name": "Request.form", "args": null, "description": "The form parameters. By default an\nImmutableMultiDict\nis returned from this function. This can be changed by setting\nparameter_storage_class to a different type. This might\nbe necessary if the order of the form data is important.\nPlease keep in mind that file uploads will not end up here, but instead\nin the files attribute.\n\nChangelog\nChanged in version 0.9: Previous to Werkzeug 0.9 this would only contain form data for POST\nand PUT requests.\n\n"}, -{"name": "Request.form_data_parser_class", "args": null, "description": "alias of werkzeug.formparser.FormDataParser\n"}, -{"name": "Request.full_path", "args": null, "description": "Requested path as unicode, including the query string.\n"}, -{"name": "Request.headers", "args": null, "description": "The headers from the WSGI environ as immutable\nEnvironHeaders.\n"}, -{"name": "Request.host", "args": null, "description": "Just the host including the port if available.\nSee also: trusted_hosts.\n"}, -{"name": "Request.host_url", "args": null, "description": "Just the host with scheme as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.if_match", "args": null, "description": "An object containing all the etags in the If-Match header.\n\n\n\n\nReturn type:ETags\n\n\n\n"}, -{"name": "Request.if_modified_since", "args": null, "description": "The parsed If-Modified-Since header as datetime object.\n"}, -{"name": "Request.if_none_match", "args": null, "description": "An object containing all the etags in the If-None-Match header.\n\n\n\n\nReturn type:ETags\n\n\n\n"}, -{"name": "Request.if_range", "args": null, "description": "The parsed If-Range header.\n\nChangelog\nNew in version 0.7.\n\n\n\n\n\nReturn type:IfRange\n\n\n\n"}, -{"name": "Request.if_unmodified_since", "args": null, "description": "The parsed If-Unmodified-Since header as datetime object.\n"}, -{"name": "Request.is_json", "args": null, "description": "Check if the mimetype indicates JSON data, either\napplication/json or application/*+json.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Request.is_multiprocess", "args": null, "description": "boolean that is True if the application is served by\na WSGI server that spawns multiple processes.\n"}, -{"name": "Request.is_multithread", "args": null, "description": "boolean that is True if the application is served by\na multithreaded WSGI server.\n"}, -{"name": "Request.is_run_once", "args": null, "description": "boolean that is True if the application will be executed only\nonce in a process lifetime. This is the case for CGI for example,\nbut it\u2019s not guaranteed that the execution only happens one time.\n"}, -{"name": "Request.is_secure", "args": null, "description": "True if the request is secure.\n"}, -{"name": "Request.is_xhr", "args": null, "description": "True if the request was triggered via a JavaScript XMLHttpRequest.\nThis only works with libraries that support the X-Requested-With\nheader and set it to \u201cXMLHttpRequest\u201d. Libraries that do that are\nprototype, jQuery and Mochikit and probably some more.\n\nDeprecated since version 0.13: X-Requested-With is not standard and is unreliable.\n\n\nChangelog"}, -{"name": "Request.json", "args": null, "description": "This will contain the parsed JSON data if the mimetype indicates\nJSON (application/json, see is_json()), otherwise it\nwill be None.\n"}, -{"name": "Request.list_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableList\n"}, -{"name": "Request.max_content_length", "args": null, "description": "Read-only view of the MAX_CONTENT_LENGTH config key.\n"}, -{"name": "Request.max_forwards", "args": null, "description": "The Max-Forwards request-header field provides a mechanism with the\nTRACE and OPTIONS methods to limit the number of proxies or gateways\nthat can forward the request to the next inbound server.\n"}, -{"name": "Request.method", "args": null, "description": "The request method. (For example 'GET' or 'POST').\n"}, -{"name": "Request.mimetype", "args": null, "description": "Like content_type, but without parameters (eg, without\ncharset, type etc.) and always lowercase. For example if the content\ntype is text/HTML; charset=utf-8 the mimetype would be\n'text/html'.\n"}, -{"name": "Request.mimetype_params", "args": null, "description": "The mimetype parameters as dict. For example if the content\ntype is text/html; charset=utf-8 the params would be\n{'charset': 'utf-8'}.\n"}, -{"name": "Request.parameter_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableMultiDict\n"}, -{"name": "Request.path", "args": null, "description": "Requested path as unicode. This works a bit like the regular path\ninfo in the WSGI environment but will always include a leading slash,\neven if the URL root is accessed.\n"}, -{"name": "Request.pragma", "args": null, "description": "The Pragma general-header field is used to include\nimplementation-specific directives that might apply to any recipient\nalong the request/response chain. All pragma directives specify\noptional behavior from the viewpoint of the protocol; however, some\nsystems MAY require that behavior be consistent with the directives.\n"}, -{"name": "Request.query_string", "args": null, "description": "The URL parameters as raw bytestring.\n"}, -{"name": "Request.range", "args": null, "description": "The parsed Range header.\n\nChangelog\nNew in version 0.7.\n\n\n\n\n\nReturn type:Range\n\n\n\n"}, -{"name": "Request.referrer", "args": null, "description": "The Referer[sic] request-header field allows the client to specify,\nfor the server\u2019s benefit, the address (URI) of the resource from which\nthe Request-URI was obtained (the \u201creferrer\u201d, although the header\nfield is misspelled).\n"}, -{"name": "Request.remote_addr", "args": null, "description": "The remote address of the client.\n"}, -{"name": "Request.remote_user", "args": null, "description": "If the server supports user authentication, and the script is\nprotected, this attribute contains the username the user has\nauthenticated as.\n"}, -{"name": "Request.routing_exception", "args": null, "description": "If matching the URL failed, this is the exception that will be\nraised / was raised as part of the request handling. This is\nusually a NotFound exception or\nsomething similar.\n"}, -{"name": "Request.scheme", "args": null, "description": "URL scheme (http or https).\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Request.script_root", "args": null, "description": "The root path of the script without the trailing slash.\n"}, -{"name": "Request.stream", "args": null, "description": "If the incoming form data was not encoded with a known mimetype\nthe data is stored unmodified in this stream for consumption. Most\nof the time it is a better idea to use data which will give\nyou that data as a string. The stream only returns the data once.\nUnlike input_stream this stream is properly guarded that you\ncan\u2019t accidentally read past the length of the input. Werkzeug will\ninternally always refer to this stream to read data which makes it\npossible to wrap this object with a stream that does filtering.\n\nChangelog\nChanged in version 0.9: This stream is now always available but might be consumed by the\nform parser later on. Previously the stream was only set if no\nparsing happened.\n\n"}, -{"name": "Request.url", "args": null, "description": "The reconstructed current URL as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.url_charset", "args": null, "description": "The charset that is assumed for URLs. Defaults to the value\nof charset.\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "Request.url_root", "args": null, "description": "The full URL root (with hostname), this is the application\nroot as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.url_rule", "args": null, "description": "The internal URL rule that matched the request. This can be\nuseful to inspect which methods are allowed for the URL from\na before/after handler (request.url_rule.methods) etc.\nThough if the request\u2019s method was invalid for the URL rule,\nthe valid list is available in routing_exception.valid_methods\ninstead (an attribute of the Werkzeug exception MethodNotAllowed)\nbecause the request was never internally bound.\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "Request.user_agent", "args": null, "description": "The current user agent.\n"}, -{"name": "Request.values", "args": null, "description": "A werkzeug.datastructures.CombinedMultiDict that combines\nargs and form.\n"}, -{"name": "Request.view_args", "args": null, "description": "A dict of view arguments that matched the request. If an exception\nhappened when matching, this will be None.\n"}, -{"name": "Request.want_form_data_parsed", "args": null, "description": "Returns True if the request method carries content. As of\nWerkzeug 0.9 this will be the case if a content type is transmitted.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Response", "args": ["response=None", "status=None", "headers=None", "mimetype=None", "content_type=None", "direct_passthrough=False"], "description": "The response object that is used by default in Flask. Works like the\nresponse object from Werkzeug but is set to have an HTML mimetype by\ndefault. Quite often you don\u2019t have to create this object yourself because\nmake_response() will take care of that for you.\n\nIf you want to replace the response object used you can subclass this and\nset response_class to your subclass.\n\n"}, -{"name": "Response.get_json", "args": ["force=False", "silent=False", "cache=True", "application/json"], "description": "Parse and return the data as JSON. If the mimetype does not\nindicate JSON (application/json, see\nis_json()), this returns None unless force is\ntrue. If parsing fails, on_json_loading_failed() is called\nand its return value is used as the return value.\n\n\n\n\nParameters:\nforce \u2013 Ignore the mimetype and always try to parse JSON.\nsilent \u2013 Silence parsing errors and return None\ninstead.\ncache \u2013 Store the parsed JSON to return for subsequent\ncalls.\n\n\n\n\n\n"}, -{"name": "Response.set_cookie", "args": ["key", "value=''", "max_age=None", "expires=None", "path='/'", "domain=None", "secure=False", "httponly=False", "samesite=None"], "description": "Sets a cookie. The parameters are the same as in the cookie Morsel\nobject in the Python standard library but it accepts unicode data, too.\nA warning is raised if the size of the cookie header exceeds\nmax_cookie_size, but the header will still be set.\n\n\n\n\nParameters:\nkey \u2013 the key (name) of the cookie to be set.\nvalue \u2013 the value of the cookie.\nmax_age \u2013 should be a number of seconds, or None (default) if\nthe cookie should last only as long as the client\u2019s\nbrowser session.\nexpires \u2013 should be a datetime object or UNIX timestamp.\npath \u2013 limits the cookie to a given path, per default it will\nspan the whole domain.\ndomain \u2013 if you want to set a cross-domain cookie. For example,\ndomain=\".example.com\" will set a cookie that is\nreadable by the domain www.example.com,\nfoo.example.com etc. Otherwise, a cookie will only\nbe readable by the domain that set it.\nsecure \u2013 If True, the cookie will only be available via HTTPS\nhttponly \u2013 disallow JavaScript to access the cookie. This is an\nextension to the cookie standard and probably not\nsupported by all browsers.\nsamesite \u2013 Limits the scope of the cookie such that it will only\nbe attached to requests if those requests are\n\u201csame-site\u201d.\n\n\n\n\n\n"}, -{"name": "Response.headers", "args": null, "description": "A Headers object representing the response headers.\n"}, -{"name": "Response.status", "args": null, "description": "A string with a response status.\n"}, -{"name": "Response.status_code", "args": null, "description": "The response status as integer.\n"}, -{"name": "Response.data", "args": null, "description": "A descriptor that calls get_data() and set_data(). This\nshould not be used and will eventually get deprecated.\n"}, -{"name": "Response.is_json", "args": null, "description": "Check if the mimetype indicates JSON data, either\napplication/json or application/*+json.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Response.max_cookie_size", "args": null, "description": "Read-only view of the MAX_COOKIE_SIZE config key.\nSee max_cookie_size in\nWerkzeug\u2019s docs.\n"}, -{"name": "Response.mimetype", "args": null, "description": "The mimetype (content type without charset etc.)\n"}, -{"name": "session", "args": [], "description": "The session object works pretty much like an ordinary dict, with the\ndifference that it keeps track on modifications.\n\nThis is a proxy. See Notes On Proxies for more information.\n\nThe following attributes are interesting:\n\n"}, -{"name": "session.new", "args": null, "description": "True if the session is new, False otherwise.\n"}, -{"name": "session.modified", "args": null, "description": "True if the session object detected a modification. Be advised\nthat modifications on mutable structures are not picked up\nautomatically, in that situation you have to explicitly set the\nattribute to True yourself. Here an example:\n# this change is not picked up because a mutable object (here\n# a list) is changed.\nsession['objects'].append(42)\n# so mark it as modified yourself\nsession.modified = True\n\n\n"}, -{"name": "session.permanent", "args": null, "description": "If set to True the session lives for\npermanent_session_lifetime seconds. The\ndefault is 31 days. If set to False (which is the default) the\nsession will be deleted when the user closes the browser.\n"}, -{"name": "SessionInterface", "args": [], "description": "The basic interface you have to implement in order to replace the\ndefault session interface which uses werkzeug\u2019s securecookie\nimplementation. The only methods you have to implement are\nopen_session() and save_session(), the others have\nuseful defaults which you don\u2019t need to change.\n\nThe session object returned by the open_session() method has to\nprovide a dictionary like interface plus the properties and methods\nfrom the SessionMixin. We recommend just subclassing a dict\nand adding that mixin:\n\nIf open_session() returns None Flask will call into\nmake_null_session() to create a session that acts as replacement\nif the session support cannot work because some requirement is not\nfulfilled. The default NullSession class that is created\nwill complain that the secret key was not set.\n\nTo replace the session interface on an application all you have to do\nis to assign flask.Flask.session_interface:\n\n"}, -{"name": "SessionInterface.get_cookie_domain", "args": ["app"], "description": "Returns the domain that should be set for the session cookie.\nUses SESSION_COOKIE_DOMAIN if it is configured, otherwise\nfalls back to detecting the domain based on SERVER_NAME.\nOnce detected (or if not set at all), SESSION_COOKIE_DOMAIN is\nupdated to avoid re-running the logic.\n"}, -{"name": "SessionInterface.get_cookie_httponly", "args": ["app"], "description": "Returns True if the session cookie should be httponly. This\ncurrently just returns the value of the SESSION_COOKIE_HTTPONLY\nconfig var.\n"}, -{"name": "SessionInterface.get_cookie_path", "args": ["app"], "description": "Returns the path for which the cookie should be valid. The\ndefault implementation uses the value from the SESSION_COOKIE_PATH\nconfig var if it\u2019s set, and falls back to APPLICATION_ROOT or\nuses / if it\u2019s None.\n"}, -{"name": "SessionInterface.get_cookie_samesite", "args": ["app"], "description": "Return 'Strict' or 'Lax' if the cookie should use the\nSameSite attribute. This currently just returns the value of\nthe SESSION_COOKIE_SAMESITE setting.\n"}, -{"name": "SessionInterface.get_cookie_secure", "args": ["app"], "description": "Returns True if the cookie should be secure. This currently\njust returns the value of the SESSION_COOKIE_SECURE setting.\n"}, -{"name": "SessionInterface.get_expiration_time", "args": ["app", "session"], "description": "A helper method that returns an expiration date for the session\nor None if the session is linked to the browser session. The\ndefault implementation returns now + the permanent session\nlifetime configured on the application.\n"}, -{"name": "SessionInterface.is_null_session", "args": ["obj"], "description": "Checks if a given object is a null session. Null sessions are\nnot asked to be saved.\nThis checks if the object is an instance of null_session_class\nby default.\n"}, -{"name": "SessionInterface.make_null_session", "args": ["app"], "description": "Creates a null session which acts as a replacement object if the\nreal session support could not be loaded due to a configuration\nerror. This mainly aids the user experience because the job of the\nnull session is to still support lookup without complaining but\nmodifications are answered with a helpful error message of what\nfailed.\nThis creates an instance of null_session_class by default.\n"}, -{"name": "SessionInterface.open_session", "args": ["app", "request"], "description": "This method has to be implemented and must either return None\nin case the loading failed because of a configuration error or an\ninstance of a session object which implements a dictionary like\ninterface + the methods and attributes on SessionMixin.\n"}, -{"name": "SessionInterface.save_session", "args": ["app", "session", "response"], "description": "This is called for actual sessions returned by open_session()\nat the end of the request. This is still called during a request\ncontext so if you absolutely need access to the request you can do\nthat.\n"}, -{"name": "SessionInterface.should_set_cookie", "args": ["app", "session"], "description": "Used by session backends to determine if a Set-Cookie header\nshould be set for this session cookie for this response. If the session\nhas been modified, the cookie is set. If the session is permanent and\nthe SESSION_REFRESH_EACH_REQUEST config is true, the cookie is\nalways set.\nThis check is usually skipped if the session was deleted.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "SessionInterface.null_session_class", "args": null, "description": "make_null_session() will look here for the class that should\nbe created when a null session is requested. Likewise the\nis_null_session() method will perform a typecheck against\nthis type.\nalias of NullSession\n"}, -{"name": "SessionInterface.pickle_based", "args": null, "description": "A flag that indicates if the session interface is pickle based.\nThis can be used by Flask extensions to make a decision in regards\nto how to deal with the session object.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "SecureCookieSessionInterface", "args": [], "description": "The default session interface that stores sessions in signed cookies\nthrough the itsdangerous module.\n\n"}, -{"name": "SecureCookieSessionInterface.open_session", "args": ["app", "request"], "description": "This method has to be implemented and must either return None\nin case the loading failed because of a configuration error or an\ninstance of a session object which implements a dictionary like\ninterface + the methods and attributes on SessionMixin.\n"}, -{"name": "SecureCookieSessionInterface.save_session", "args": ["app", "session", "response"], "description": "This is called for actual sessions returned by open_session()\nat the end of the request. This is still called during a request\ncontext so if you absolutely need access to the request you can do\nthat.\n"}, -{"name": "SecureCookieSessionInterface.key_derivation", "args": null, "description": "the name of the itsdangerous supported key derivation. The default\nis hmac.\n"}, -{"name": "SecureCookieSessionInterface.salt", "args": null, "description": "the salt that should be applied on top of the secret key for the\nsigning of cookie based sessions.\n"}, -{"name": "SecureCookieSessionInterface.serializer", "args": null, "description": "A python serializer for the payload. The default is a compact\nJSON derived serializer with support for some extra Python types\nsuch as datetime objects or tuples.\n"}, -{"name": "SecureCookieSessionInterface.session_class", "args": null, "description": "alias of SecureCookieSession\n"}, -{"name": "SecureCookieSession", "args": ["initial=None"], "description": "Base class for sessions based on signed cookies.\n\nThis session backend will set the modified and\naccessed attributes. It cannot reliably track whether a\nsession is new (vs. empty), so new remains hard coded to\nFalse.\n\n"}, -{"name": "SecureCookieSession.get", "args": ["k", "d"], "description": ""}, -{"name": "SecureCookieSession.setdefault", "args": ["k", "d"], "description": ""}, -{"name": "SecureCookieSession.accessed", "args": null, "description": "header, which allows caching proxies to cache different pages for\ndifferent users.\n"}, -{"name": "SecureCookieSession.modified", "args": null, "description": "When data is changed, this is set to True. Only the session\ndictionary itself is tracked; if the session contains mutable\ndata (for example a nested dict) then this must be set to\nTrue manually when modifying that data. The session cookie\nwill only be written to the response if this is True.\n"}, -{"name": "NullSession", "args": ["initial=None"], "description": "Class used to generate nicer error messages if sessions are not\navailable. Will still allow read-only access to the empty session\nbut fail on setting.\n\n"}, -{"name": "SessionMixin", "args": [], "description": "Expands a basic dictionary with session attributes.\n\n"}, -{"name": "SessionMixin.accessed", "args": null, "description": "Some implementations can detect when session data is read or\nwritten and set this when that happens. The mixin default is hard\ncoded to True.\n"}, -{"name": "SessionMixin.modified", "args": null, "description": "Some implementations can detect changes to the session and set\nthis when that happens. The mixin default is hard coded to\nTrue.\n"}, -{"name": "SessionMixin.permanent", "args": null, "description": "This reflects the '_permanent' key in the dict.\n"}, -{"name": "FlaskClient", "args": ["*args", "**kwargs"], "description": "Works like a regular Werkzeug test client but has some knowledge about\nhow Flask works to defer the cleanup of the request context stack to the\nend of a with body when used in a with statement. For general\ninformation about how to use this class refer to\nwerkzeug.test.Client.\n\nBasic usage is outlined in the Testing Flask Applications chapter.\n\n"}, -{"name": "FlaskClient.open", "args": ["*args", "**kwargs"], "description": "Takes the same arguments as the EnvironBuilder class with\nsome additions: You can provide a EnvironBuilder or a WSGI\nenvironment as only argument instead of the EnvironBuilder\narguments and two optional keyword arguments (as_tuple, buffered)\nthat change the type of the return value or the way the application is\nexecuted.\n\nChangelog\nChanged in version 0.5: If a dict is provided as file in the dict for the data parameter\nthe content type has to be called content_type now instead of\nmimetype. This change was made for consistency with\nwerkzeug.FileWrapper.\n\nThe follow_redirects parameter was added to open().\n\nAdditional parameters:\n\n\n\n\nParameters:\nas_tuple \u2013 Returns a tuple in the form (environ, result)\nbuffered \u2013 Set this to True to buffer the application run.\nThis will automatically close the application for\nyou as well.\nfollow_redirects \u2013 Set this to True if the Client should\nfollow HTTP redirects.\n\n\n\n\n\n"}, -{"name": "FlaskClient.session_transaction", "args": ["*args", "**kwargs"], "description": "When used in combination with a with statement this opens a\nsession transaction. This can be used to modify the session that\nthe test client uses. Once the with block is left the session is\nstored back.\nwith client.session_transaction() as session:\n session['value'] = 42\n\n\nInternally this is implemented by going through a temporary test\nrequest context and since session handling could depend on\nrequest variables this function accepts the same arguments as\ntest_request_context() which are directly\npassed through.\n"}, -{"name": "FlaskCliRunner", "args": ["app", "**kwargs"], "description": "A CliRunner for testing a Flask app\u2019s\nCLI commands. Typically created using\ntest_cli_runner(). See Testing CLI Commands.\n\n"}, -{"name": "FlaskCliRunner.invoke", "args": ["cli=None", "args=None", "**kwargs"], "description": "Invokes a CLI command in an isolated environment. See\nCliRunner.invoke for\nfull method documentation. See Testing CLI Commands for examples.\nIf the obj argument is not given, passes an instance of\nScriptInfo that knows how to load the Flask\napp being tested.\n\n\n\n\nParameters:\ncli \u2013 Command object to invoke. Default is the app\u2019s\ncli group.\nargs \u2013 List of strings to invoke the command with.\n\n\n\nReturns:a Result object.\n\n\n\n\n"}, -{"name": "_AppCtxGlobals", "args": [], "description": "A plain object. Used as a namespace for storing data during an\napplication context.\n\nCreating an app context automatically creates this object, which is\nmade available as the g proxy.\n\n"}, -{"name": "_AppCtxGlobals.get", "args": ["name", "default=None"], "description": "Get an attribute by name, or a default value. Like\ndict.get().\n\n\n\n\nParameters:\nname \u2013 Name of attribute to get.\ndefault \u2013 Value to return if the attribute is not present.\n\n\n\n\n\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "_AppCtxGlobals.pop", "args": ["name", "default=<object object>"], "description": "Get and remove an attribute by name. Like dict.pop().\n\n\n\n\nParameters:\nname \u2013 Name of attribute to pop.\ndefault \u2013 Value to return if the attribute is not present,\ninstead of raise a KeyError.\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "_AppCtxGlobals.setdefault", "args": ["name", "default=None"], "description": "Get the value of an attribute if it is present, otherwise\nset and return a default value. Like dict.setdefault().\n\n\n\n\nParameters:name \u2013 Name of attribute to get.\n\nParam:default: Value to set and return if the attribute is not\npresent.\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Markup", "args": [], "description": "Marks a string as being safe for inclusion in HTML/XML output without\nneeding to be escaped. This implements the __html__ interface a couple\nof frameworks and web applications use. Markup is a direct\nsubclass of unicode and provides all the methods of unicode just that\nit escapes arguments passed and always returns Markup.\n\nThe escape function returns markup objects so that double escaping can\u2019t\nhappen.\n\nThe constructor of the Markup class can be used for three\ndifferent things: When passed an unicode object it\u2019s assumed to be safe,\nwhen passed an object with an HTML representation (has an __html__\nmethod) that representation is used, otherwise the object passed is\nconverted into a unicode string and then assumed to be safe:\n\nIf you want object passed being always treated as unsafe you can use the\nescape() classmethod to create a Markup object:\n\nOperations on a markup string are markup aware which means that all\narguments are passed through the escape() function:\n\n"}, -{"name": "Markup.striptags", "args": [], "description": "Unescape markup into an text_type string and strip all tags. This\nalso resolves known HTML4 and XHTML entities. Whitespace is\nnormalized to one:\n>>> Markup(\"Main » About\").striptags()\nu'Main \\xbb About'\n\n\n"}, -{"name": "Markup.unescape", "args": [], "description": "Unescape markup again into an text_type string. This also resolves\nknown HTML4 and XHTML entities:\n>>> Markup(\"Main » About\").unescape()\nu'Main \\xbb About'\n\n\n"}, -{"name": "JSONEncoder", "args": ["*", "skipkeys=False", "ensure_ascii=True", "check_circular=True", "allow_nan=True", "sort_keys=False", "indent=None", "separators=None", "default=None"], "description": "The default Flask JSON encoder. This one extends the default simplejson\nencoder by also supporting datetime objects, UUID as well as\nMarkup objects which are serialized as RFC 822 datetime strings (same\nas the HTTP date format). In order to support more data types override the\ndefault() method.\n\n"}, -{"name": "JSONEncoder.default", "args": ["o"], "description": "Implement this method in a subclass such that it returns a\nserializable object for o, or calls the base implementation (to\nraise a TypeError).\nFor example, to support arbitrary iterators, you could implement\ndefault like this:\ndef default(self, o):\n try:\n iterable = iter(o)\n except TypeError:\n pass\n else:\n return list(iterable)\n return JSONEncoder.default(self, o)\n\n\n"}, -{"name": "JSONDecoder", "args": ["*", "object_hook=None", "parse_float=None", "parse_int=None", "parse_constant=None", "strict=True", "object_pairs_hook=None"], "description": "The default JSON decoder. This one does not change the behavior from\nthe default simplejson decoder. Consult the json documentation\nfor more information. This decoder is not only used for the load\nfunctions of this module but also Request.\n\n"}, -{"name": "TaggedJSONSerializer", "args": [], "description": "Serializer that uses a tag system to compactly represent objects that\nare not JSON types. Passed as the intermediate serializer to\nitsdangerous.Serializer.\n\nThe following extra types are supported:\n\n"}, -{"name": "TaggedJSONSerializer.dumps", "args": ["value"], "description": "Tag the value and dump it to a compact JSON string.\n"}, -{"name": "TaggedJSONSerializer.loads", "args": ["value"], "description": "Load data from a JSON string and deserialized any tagged objects.\n"}, -{"name": "TaggedJSONSerializer.register", "args": ["tag_class", "force=False", "index=None"], "description": "Register a new tag with this serializer.\n\n\n\n\nParameters:\ntag_class \u2013 tag class to register. Will be instantiated with this\nserializer instance.\nforce \u2013 overwrite an existing tag. If false (default), a\nKeyError is raised.\nindex \u2013 index to insert the new tag in the tag order. Useful when\nthe new tag is a special case of an existing tag. If None\n(default), the tag is appended to the end of the order.\n\n\n\nRaises:KeyError \u2013 if the tag key is already registered and force is\nnot true.\n\n\n\n\n"}, -{"name": "TaggedJSONSerializer.tag", "args": ["value"], "description": "Convert a value to a tagged representation if necessary.\n"}, -{"name": "TaggedJSONSerializer.untag", "args": ["value"], "description": "Convert a tagged representation back to the original type.\n"}, -{"name": "TaggedJSONSerializer.default_tags", "args": null, "description": "Tag classes to bind when creating the serializer. Other tags can be\nadded later using register().\n"}, -{"name": "JSONTag", "args": ["serializer"], "description": "Base class for defining type tags for TaggedJSONSerializer.\n\n"}, -{"name": "JSONTag.check", "args": ["value"], "description": "Check if the given value should be tagged by this tag.\n"}, -{"name": "JSONTag.tag", "args": ["value"], "description": "Convert the value to a valid JSON type and add the tag structure\naround it.\n"}, -{"name": "JSONTag.to_json", "args": ["value"], "description": "Convert the Python object to an object that is a valid JSON type.\nThe tag will be added later.\n"}, -{"name": "JSONTag.to_python", "args": ["value"], "description": "Convert the JSON representation back to the correct type. The tag\nwill already be removed.\n"}, -{"name": "JSONTag.key", "args": null, "description": "The tag to mark the serialized object with. If None, this tag is\nonly used as an intermediate step during tagging.\n"}, -{"name": "Config", "args": ["root_path", "defaults=None"], "description": "Works exactly like a dict but provides ways to fill it from files\nor special dictionaries. There are two common patterns to populate the\nconfig.\n\nEither you can fill the config from a config file:\n\nOr alternatively you can define the configuration options in the\nmodule that calls from_object() or provide an import path to\na module that should be loaded. It is also possible to tell it to\nuse the same module and with that provide the configuration values\njust before the call:\n\nIn both cases (loading from any Python file or loading from modules),\nonly uppercase keys are added to the config. This makes it possible to use\nlowercase values in the config file for temporary values that are not added\nto the config or to define the config keys in the same file that implements\nthe application.\n\nProbably the most interesting way to load configurations is from an\nenvironment variable pointing to a file:\n\nIn this case before launching the application you have to set this\nenvironment variable to the file you want to use. On Linux and OS X\nuse the export statement:\n\nOn windows use set instead.\n\n\nParameters:\nroot_path \u2013 path to which files are read relative from. When the\nconfig object is created by the application, this is\nthe application\u2019s root_path.\ndefaults \u2013 an optional dictionary of default values"}, -{"name": "Config.from_envvar", "args": ["variable_name", "silent=False"], "description": "Loads a configuration from an environment variable pointing to\na configuration file. This is basically just a shortcut with nicer\nerror messages for this line of code:\napp.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])\n\n\n\n\n\n\nParameters:\nvariable_name \u2013 name of the environment variable\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\nReturns:bool. True if able to load config, False otherwise.\n\n\n\n\n"}, -{"name": "Config.from_json", "args": ["filename", "silent=False"], "description": "Updates the values in the config from a JSON file. This function\nbehaves as if the JSON object was a dictionary and passed to the\nfrom_mapping() function.\n\n\n\n\nParameters:\nfilename \u2013 the filename of the JSON file. This can either be an\nabsolute filename or a filename relative to the\nroot path.\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Config.from_mapping", "args": ["*mapping", "**kwargs"], "description": "Updates the config like update() ignoring items with non-upper\nkeys.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Config.from_object", "args": ["obj"], "description": "Updates the values from the given object. An object can be of one\nof the following two types:\n\na string: in this case the object with that name will be imported\nan actual object reference: that object is used directly\n\nObjects are usually either modules or classes. from_object()\nloads only the uppercase attributes of the module/class. A dict\nobject will not work with from_object() because the keys of a\ndict are not attributes of the dict class.\nExample of module-based configuration:\napp.config.from_object('yourapplication.default_config')\nfrom yourapplication import default_config\napp.config.from_object(default_config)\n\n\nYou should not use this function to load the actual configuration but\nrather configuration defaults. The actual config should be loaded\nwith from_pyfile() and ideally from a location not within the\npackage because the package might be installed system wide.\nSee Development / Production for an example of class-based configuration\nusing from_object().\n\n\n\n\nParameters:obj \u2013 an import name or object\n\n\n\n"}, -{"name": "Config.from_pyfile", "args": ["filename", "silent=False"], "description": "Updates the values in the config from a Python file. This function\nbehaves as if the file was imported as module with the\nfrom_object() function.\n\n\n\n\nParameters:\nfilename \u2013 the filename of the config. This can either be an\nabsolute filename or a filename relative to the\nroot path.\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\n\n\n\nChangelog\nNew in version 0.7: silent parameter.\n\n"}, -{"name": "Config.get_namespace", "args": ["namespace", "lowercase=True", "trim_namespace=True"], "description": "Returns a dictionary containing a subset of configuration options\nthat match the specified namespace/prefix. Example usage:\napp.config['IMAGE_STORE_TYPE'] = 'fs'\napp.config['IMAGE_STORE_PATH'] = '/var/app/images'\napp.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com'\nimage_store_config = app.config.get_namespace('IMAGE_STORE_')\n\n\nThe resulting dictionary image_store_config would look like:\n{\n 'type': 'fs',\n 'path': '/var/app/images',\n 'base_url': 'http://img.website.com'\n}\n\n\nThis is often useful when configuration options map directly to\nkeyword arguments in functions or class constructors.\n\n\n\n\nParameters:\nnamespace \u2013 a configuration namespace\nlowercase \u2013 a flag indicating if the keys of the resulting\ndictionary should be lowercase\ntrim_namespace \u2013 a flag indicating if the keys of the resulting\ndictionary should not include the namespace\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "RequestContext", "args": ["app", "environ", "request=None"], "description": "The request context contains all request relevant information. It is\ncreated at the beginning of the request and pushed to the\n_request_ctx_stack and removed at the end of it. It will create the\nURL adapter and request object for the WSGI environment provided.\n\nDo not attempt to use this class directly, instead use\ntest_request_context() and\nrequest_context() to create this object.\n\nWhen the request context is popped, it will evaluate all the\nfunctions registered on the application for teardown execution\n(teardown_request()).\n\nThe request context is automatically popped at the end of the request\nfor you. In debug mode the request context is kept around if\nexceptions happen so that interactive debuggers have a chance to\nintrospect the data. With 0.4 this can also be forced for requests\nthat did not fail and outside of DEBUG mode. By setting\n'flask._preserve_context' to True on the WSGI environment the\ncontext will not pop itself at the end of the request. This is used by\nthe test_client() for example to implement the\ndeferred cleanup functionality.\n\nYou might find this helpful for unittests where you need the\ninformation from the context local around for a little longer. Make\nsure to properly pop() the stack yourself in\nthat situation, otherwise your unittests will leak memory.\n\n"}, -{"name": "RequestContext.copy", "args": [], "description": "Creates a copy of this request context with the same request object.\nThis can be used to move a request context to a different greenlet.\nBecause the actual request object is the same this cannot be used to\nmove a request context to a different thread unless access to the\nrequest object is locked.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "RequestContext.match_request", "args": [], "description": "Can be overridden by a subclass to hook into the matching\nof the request.\n"}, -{"name": "RequestContext.pop", "args": ["exc=<object object>"], "description": "Pops the request context and unbinds it by doing that. This will\nalso trigger the execution of functions registered by the\nteardown_request() decorator.\n\nChangelog\nChanged in version 0.9: Added the exc argument.\n\n"}, -{"name": "RequestContext.push", "args": [], "description": "Binds the request context to the current context.\n"}, -{"name": "AppContext", "args": ["app"], "description": "The application context binds an application object implicitly\nto the current thread or greenlet, similar to how the\nRequestContext binds request information. The application\ncontext is also implicitly created if a request context is created\nbut the application is not on top of the individual application\ncontext.\n\n"}, -{"name": "AppContext.pop", "args": ["exc=<object object>"], "description": "Pops the app context.\n"}, -{"name": "AppContext.push", "args": [], "description": "Binds the app context to the current context.\n"}, -{"name": "BlueprintSetupState", "args": ["blueprint", "app", "options", "first_registration"], "description": "Temporary holder object for registering a blueprint with the\napplication. An instance of this class is created by the\nmake_setup_state() method and later passed\nto all register callback functions.\n\n"}, -{"name": "BlueprintSetupState.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "**options"], "description": "A helper method to register a rule (and optionally a view function)\nto the application. The endpoint is automatically prefixed with the\nblueprint\u2019s name.\n"}, -{"name": "BlueprintSetupState.app", "args": null, "description": "a reference to the current application\n"}, -{"name": "BlueprintSetupState.blueprint", "args": null, "description": "a reference to the blueprint that created this setup state.\n"}, -{"name": "BlueprintSetupState.first_registration", "args": null, "description": "as blueprints can be registered multiple times with the\napplication and not everything wants to be registered\nmultiple times on it, this attribute can be used to figure\nout if the blueprint was registered in the past already.\n"}, -{"name": "BlueprintSetupState.options", "args": null, "description": "a dictionary with all options that were passed to the\nregister_blueprint() method.\n"}, -{"name": "BlueprintSetupState.subdomain", "args": null, "description": "The subdomain that the blueprint should be active for, None\notherwise.\n"}, -{"name": "BlueprintSetupState.url_defaults", "args": null, "description": "A dictionary with URL defaults that is added to each and every\nURL that was defined with the blueprint.\n"}, -{"name": "BlueprintSetupState.url_prefix", "args": null, "description": "The prefix that should be used for all URLs defined on the\nblueprint.\n"}, -{"name": "Namespace", "args": [], "description": "An alias for blinker.base.Namespace if blinker is available,\notherwise a dummy class that creates fake signals. This class is\navailable for Flask extensions that want to provide the same fallback\nsystem as Flask itself.\n\n"}, -{"name": "Namespace.signal", "args": ["name", "doc=None"], "description": "Creates a new signal for this namespace if blinker is available,\notherwise returns a fake signal that has a send method that will\ndo nothing but will fail with a RuntimeError for all other\noperations, including connecting.\n"}, -{"name": "View", "args": [], "description": "Alternative way to use view functions. A subclass has to implement\ndispatch_request() which is called with the view arguments from\nthe URL routing system. If methods is provided the methods\ndo not have to be passed to the add_url_rule()\nmethod explicitly:\n\nWhen you want to decorate a pluggable view you will have to either do that\nwhen the view function is created (by wrapping the return value of\nas_view()) or you can use the decorators attribute:\n\nThe decorators stored in the decorators list are applied one after another\nwhen the view function is created. Note that you can not use the class\nbased decorators since those would decorate the view class and not the\ngenerated view function!\n\n"}, -{"name": "View.dispatch_request", "args": [], "description": "Subclasses have to override this method to implement the\nactual view function code. This method is called with all\nthe arguments from the URL rule.\n"}, -{"name": "View.decorators", "args": null, "description": "The canonical way to decorate class-based views is to decorate the\nreturn value of as_view(). However since this moves parts of the\nlogic from the class declaration to the place where it\u2019s hooked\ninto the routing system.\nYou can place one or more decorators in this list and whenever the\nview function is created the result is automatically decorated.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "View.methods", "args": null, "description": "A list of methods this view can handle.\n"}, -{"name": "View.provide_automatic_options", "args": null, "description": "Setting this disables or force-enables the automatic options handling.\n"}, -{"name": "MethodView", "args": [], "description": "A class-based view that dispatches request methods to the corresponding\nclass methods. For example, if you implement a get method, it will be\nused to handle GET requests.\n\n"}, -{"name": "MethodView.dispatch_request", "args": ["*args", "**kwargs"], "description": "Subclasses have to override this method to implement the\nactual view function code. This method is called with all\nthe arguments from the URL rule.\n"}, -{"name": "FlaskGroup", "args": ["add_default_commands=True", "create_app=None", "add_version_option=True", "load_dotenv=True", "**extra"], "description": "Special subclass of the AppGroup group that supports\nloading more commands from the configured Flask app. Normally a\ndeveloper does not have to interface with this class but there are\nsome very advanced use cases for which it makes sense to create an\ninstance of this.\n\nFor information as of why this is useful see Custom Scripts.\n\n\nParameters:\nadd_default_commands \u2013 if this is True then the default run and\nshell commands wil be added.\nadd_version_option \u2013 adds the --version option.\ncreate_app \u2013 an optional callback that is passed the script info and\nreturns the loaded app.\nload_dotenv \u2013 Load the nearest .env and .flaskenv\nfiles to set environment variables. Will also change the working\ndirectory to the directory containing the first file found."}, -{"name": "FlaskGroup.get_command", "args": ["ctx", "name"], "description": "Given a context and a command name, this returns a\nCommand object if it exists or returns None.\n"}, -{"name": "FlaskGroup.list_commands", "args": ["ctx"], "description": "Returns a list of subcommand names in the order they should\nappear.\n"}, -{"name": "FlaskGroup.main", "args": ["*args", "**kwargs"], "description": "This is the way to invoke a script with all the bells and\nwhistles as a command line application. This will always terminate\nthe application after a call. If this is not wanted, SystemExit\nneeds to be caught.\nThis method is also available by directly calling the instance of\na Command.\n\nNew in version 3.0: Added the standalone_mode flag to control the standalone mode.\n\n\nChangelog\n\n\n\nParameters:\nargs \u2013 the arguments that should be used for parsing. If not\nprovided, sys.argv[1:] is used.\nprog_name \u2013 the program name that should be used. By default\nthe program name is constructed by taking the file\nname from sys.argv[0].\ncomplete_var \u2013 the environment variable that controls the\nbash completion support. The default is\n\"__COMPLETE\" with prog name in\nuppercase.\nstandalone_mode \u2013 the default behavior is to invoke the script\nin standalone mode. Click will then\nhandle exceptions and convert them into\nerror messages and the function will never\nreturn but shut down the interpreter. If\nthis is set to False they will be\npropagated to the caller and the return\nvalue of this function is the return value\nof invoke().\nextra \u2013 extra keyword arguments are forwarded to the context\nconstructor. See Context for more information.\n\n\n\n\n\n"}, -{"name": "AppGroup", "args": ["name=None", "commands=None", "**attrs"], "description": "This works similar to a regular click Group but it\nchanges the behavior of the command() decorator so that it\nautomatically wraps the functions in with_appcontext().\n\nNot to be confused with FlaskGroup.\n\n"}, -{"name": "AppGroup.command", "args": ["*args", "**kwargs"], "description": "This works exactly like the method of the same name on a regular\nclick.Group but it wraps callbacks in with_appcontext()\nunless it\u2019s disabled by passing with_appcontext=False.\n"}, -{"name": "AppGroup.group", "args": ["*args", "**kwargs"], "description": "This works exactly like the method of the same name on a regular\nclick.Group but it defaults the group class to\nAppGroup.\n"}, -{"name": "ScriptInfo", "args": ["app_import_path=None", "create_app=None"], "description": "Help object to deal with Flask applications. This is usually not\nnecessary to interface with as it\u2019s used internally in the dispatching\nto click. In future versions of Flask this object will most likely play\na bigger role. Typically it\u2019s created automatically by the\nFlaskGroup but you can also manually create it and pass it\nonwards as click object.\n\n"}, -{"name": "ScriptInfo.load_app", "args": [], "description": "Loads the Flask app (if not yet loaded) and returns it. Calling\nthis multiple times will just result in the already loaded app to\nbe returned.\n"}, -{"name": "ScriptInfo.app_import_path", "args": null, "description": "Optionally the import path for the Flask application.\n"}, -{"name": "ScriptInfo.create_app", "args": null, "description": "Optionally a function that is passed the script info to create\nthe instance of the application.\n"}, -{"name": "ScriptInfo.data", "args": null, "description": "A dictionary with arbitrary data that can be associated with\nthis script info.\n"} -] diff --git a/utils/flask_api.py b/utils/flask_api.py deleted file mode 100644 index abfa8f18b..000000000 --- a/utils/flask_api.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -Generate the Flask API data used for Mu's autocomplete/calltips. - -Requires the `beautifulsoup4` and `requests` packages (the `utils` extra). - -Usage: - - python flask_api.py [output.json] - -Fetches the Flask API reference and writes a JSON list of API entries -(default: flask.json). -""" - -import json -import sys - -import requests -from bs4 import BeautifulSoup - - -# The `en/stable/` alias always tracks the current stable Flask release, so -# this keeps working across Flask versions without a hard-coded version path. -URL = "https://flask.palletsprojects.com/en/stable/api/" - - -def to_dict(name, args, description): - """ - Returns a dictionary representation of the API element if valid, else - returns None. - """ - if name.endswith("__"): - return None - return {"name": name, "args": args, "description": description} - - -def descname(spec): - """Returns the bare API name from a dt signature (its ``descname`` span).""" - name = spec.select_one("span.descname") - return name.get_text() if name else "" - - -def sig_params(spec): - """Returns the list of parameter strings from a dt signature.""" - return [em.get_text() for em in spec.select("em.sig-param")] - - -def parse(soup): - """ - Yields the API elements scraped from a parsed Flask API documentation page. - - Targets the modern Sphinx markup (``dl.py.function``, ``span.descname``, - ``em.sig-param``) used by the current Flask docs. - """ - # Find all the function definitions on the page: - for func in soup.select("dl.py.function"): - # Spec and doc are always the first dt/dd in the dl. - func_spec = func.select_one("dt") - func_doc = func.select_one("dd") - d = to_dict(descname(func_spec), sig_params(func_spec), func_doc.get_text()) - if d: - yield d - # Find all the class definitions on the page: - for classes in soup.select("dl.py.class"): - class_spec = classes.select_one("dt") - class_doc = classes.select_one("dd") - class_name = descname(class_spec) - # Class description: the leading paragraphs, up to the first nested - # definition list (members) or field list (params/returns). - description = "" - for child in class_doc.contents: - name = getattr(child, "name", None) - if name == "p": - description += child.get_text() + "\n\n" - if name in ("dl", "table"): - break - d = to_dict(class_name, sig_params(class_spec), description) - if d: - yield d - # Members: methods, then attributes / properties / data. - for method in classes.select("dl.py.method"): - method_name = descname(method.select_one("dt")) - if method_name.startswith("__"): - continue - method_name = class_name + "." + method_name - method_args = sig_params(method.select_one("dt")) - d = to_dict(method_name, method_args, method.select_one("dd").get_text()) - if d: - yield d - for member in classes.select("dl.py.attribute, dl.py.property, dl.py.data"): - name = class_name + "." + descname(member.select_one("dt")) - d = to_dict(name, None, member.select_one("dd").get_text()) - if d: - yield d - - -def main(output="flask.json"): - response = requests.get(URL) - response.raise_for_status() - soup = BeautifulSoup(response.text, "html.parser") - entries = list(parse(soup)) - with open(output, "w", encoding="utf-8") as f: - json.dump(entries, f, indent=2) - - -if __name__ == "__main__": - main(*sys.argv[1:]) diff --git a/utils/gh_downloads.py b/utils/gh_downloads.py index 609958cad..2f016fa99 100644 --- a/utils/gh_downloads.py +++ b/utils/gh_downloads.py @@ -1,14 +1,14 @@ #!/usr/bin/env python3 """ Retrieves the GH releases stats from their open API and counts the total number -of asset downloads, which so far are all Mu installers. +of asset downloads, which so far are all Nu installers. """ import datetime import requests -releases = requests.get("https://api.github.com/repos/mu-editor/mu/releases").json() +releases = requests.get("https://api.github.com/repos/kovirlabs/nu/releases").json() # First generate date objects for each release and add them to their dictionary for release in releases: From 99c0e8306f93b5d37e0d728b309a6e91c5d3f6e8 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:37:17 -0500 Subject: [PATCH 15/18] Drop obsolete translations from the catalogues Each mu.po carried about 100 obsolete (#~) entries (225 in French), many for strings of Mu's removed modes ("Files on your micro:bit:", "Minify Python code before flashing?", ESP and Web mode texts). They're never compiled into the .mo files, so learners never saw them; they were 7,600 lines of noise for translators. Removed textually, leaving every other byte alone; babel confirms each catalogue's live messages are unchanged. make translate_begin now passes --ignore-obsolete to pybabel update, so they don't build up again (git keeps the history, which is what utils/recover_renamed_translations.py reads), and the translation extraction no longer lists the deleted mu/contrib. Co-Authored-By: Claude Opus 5.5 --- make.py | 5 +- mu/locale/de_DE/LC_MESSAGES/mu.po | 525 ------------------ mu/locale/es/LC_MESSAGES/mu.po | 535 ------------------ mu/locale/fr/LC_MESSAGES/mu.po | 895 ------------------------------ mu/locale/ja/LC_MESSAGES/mu.po | 458 --------------- mu/locale/nl/LC_MESSAGES/mu.po | 585 ------------------- mu/locale/pl/LC_MESSAGES/mu.po | 519 ----------------- mu/locale/pt_BR/LC_MESSAGES/mu.po | 545 ------------------ mu/locale/pt_PT/LC_MESSAGES/mu.po | 511 ----------------- mu/locale/ru_RU/LC_MESSAGES/mu.po | 518 ----------------- mu/locale/sk_SK/LC_MESSAGES/mu.po | 542 ------------------ mu/locale/sv/LC_MESSAGES/mu.po | 512 ----------------- mu/locale/uk_UA/LC_MESSAGES/mu.po | 517 ----------------- mu/locale/vi/LC_MESSAGES/mu.po | 524 ----------------- mu/locale/zh_CN/LC_MESSAGES/mu.po | 449 --------------- 15 files changed, 4 insertions(+), 7636 deletions(-) diff --git a/make.py b/make.py index 06deb0dc8..d8bda41e3 100644 --- a/make.py +++ b/make.py @@ -226,6 +226,10 @@ def translate_begin(lang=""): mu_po_filename, "--locale={locale}".format(locale=lang), ] + if update: + # Don't keep translations of strings Nu no longer has (#~ entries): + # git keeps the history, see utils/recover_renamed_translations.py. + cmd.append("--ignore-obsolete") result = subprocess.run(cmd).returncode print( @@ -241,7 +245,6 @@ def translate_begin(lang=""): _TRANSLATE_IGNORE_DIRNAMES = { os.path.join("mu", "modes", "api"), - os.path.join("mu", "contrib"), } # Bundled plugins use Nu's own message catalog, so their packages are # extracted too (but not their API stubs or tests). diff --git a/mu/locale/de_DE/LC_MESSAGES/mu.po b/mu/locale/de_DE/LC_MESSAGES/mu.po index b9fed05fe..1435a1029 100644 --- a/mu/locale/de_DE/LC_MESSAGES/mu.po +++ b/mu/locale/de_DE/LC_MESSAGES/mu.po @@ -1613,528 +1613,3 @@ msgstr "Musik anzeigen, die von Pygame Zero benutzt wird." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Pygame Zero Spiel beenden." - -#~ msgid "Logging to {}" -#~ msgstr "Protokolliere nach {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "" -#~ "Debugger benötigt zum Ausführen einen " -#~ "Dateinamen zu einem Python Skript." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Dateien auf Ihrem micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Ihr Skript ist zu lang!" - -#~ msgid " Runtime: {}" -#~ msgstr " Runtime: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Python-Code vor dem Flashen verkleinern?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Überschreibe die eingebaute MicroPython " -#~ "Runtime mit der nachfolgenden hex Datei" -#~ " (leer benutzt den Standardwert):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the
https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit Einstellungen" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Dateisystem auf micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Datei existiert bereits; Überschreiben?" - -#~ msgid "File already exists" -#~ msgstr "Datei existiert bereits" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Kopiere '{}' nach micro:bit." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}\" erfolgreich auf den micro:bit kopiert." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Löschen (kann nicht rückgängig gemacht werden)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Lösche '{}' vom micro:bit." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' erfolgreich vom micro:bit gelöscht." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Lade '{}' vom micro:bit. Kopiere nach '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' erfolgreich vom micro:bit auf Ihren Rechner kopiert." - -#~ msgid "Open in Mu" -#~ msgstr "In Mu öffnen" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Öffne '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Dateien auf Ihrem Rechner:" - -#~ msgid "Files on your computer:" -#~ msgstr "Dateien auf Ihrem Rechner:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Beim Laden der Liste der Dateien " -#~ "auf dem micro:bit ist ein Problem " -#~ "aufgetreten. Prüfe das Protokoll von Mu" -#~ " für technische Informationen. Alternativ, " -#~ "versuche Deinen micro:bit aus und wieder" -#~ " einzustecken und/oder Mu neuzustarten." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Beim Kopieren von '{}' auf den " -#~ "micro:bit ist ein Problem aufgetreten. " -#~ "Prüfe das Protokoll von Mu für " -#~ "mehr Informationen." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Beim Löschen von '{}' vom micro:bit " -#~ "ist ein Problem aufgetreten. Prüfe das" -#~ " Protokoll von Mu für mehr " -#~ "Informationen." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Beim Laden von '{}' vom micro:bit " -#~ "ist ein Problem aufgetreten. Prüfe das" -#~ " Protokoll von Mu für mehr " -#~ "Informationen." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Konnte die MicroPython runtime nicht finden." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Die angegebene micro:bit runtime ('{}') " -#~ "existiert nicht. Bitte versuche es " -#~ "erneut." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Dateien" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Zugriff auf das Dateisystem des micro:bit." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "REPL benutzen, um live auf dem micro:bit zu programmieren." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL und Dateisystem funktionieren nicht gleichzeitig." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "Der REPL und das Dateisystem nutzen " -#~ "die gleiche USB-Seriell-Verbindung. Zu" -#~ " jedem Zeitpunkt kann nur eins davon" -#~ " aktiv sein. Schalte das Dateisystem " -#~ "aus und probiere es erneut." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Der Plotter und das Dateisystem funktionieren nicht zur gleichen Zeit." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Das Dateisystem und der REPL und " -#~ "Plotter nutzen die gleiche USB-" -#~ "Seriell-Verbindung. Zu jedem Zeitpunkt kann" -#~ " nur eins davon aktiv sein. Schalte" -#~ " den REPL und Plotter aus und " -#~ "versuche es erneut." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Dateisystem funktioniert nicht gleichzeitig zum REPL oder Plotter." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Das Dateisystem und der REPL und " -#~ "Plotter nutzen die gleiche USB-" -#~ "Seriell-Verbindung. Schalte den REPL und" -#~ " Plotter aus und versuche es erneut." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Konnte kein angeschlossenes Gerät finden." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Bitte stelle sicher, dass das Gerät " -#~ "an den Computer angeschlossen ist.\n" -#~ "\n" -#~ "Das Gerät muss MicroPython aufgespielt " -#~ "haben bevor das Dateisystem funktioniert.\n" -#~ "" -#~ "\n" -#~ "Drücke den Reset Knopf des Gerätes " -#~ "und warte einige Sekunden bevor Du " -#~ "es erneut versuchst." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "MicroPython für den BBC micro:bit schreiben." - -#~ msgid "Flash" -#~ msgstr "Aufspielen" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Code auf den micro:bit aufspielen." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Zugriff auf das Dateisystem des micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "REPL benutzen, um live auf dem micro:bit zu programmieren." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ihr Skript ist zu lang und der Minifier ist nicht verfügbar" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ihr Skript ist zu lang und der Minifier ist nicht verfügbar" - -#~ msgid "Problem minifying script" -#~ msgstr "Problem mit dem Skript" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Der Minifier wurde ausgeführt, aber das Skript ist zu lang!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Konnte nicht aufspielen: \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Konnte den angeschlossenen BBC micro:bit nicht finden." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Bitte stelle sicher, dass du genug " -#~ "Zeit lässt damit der BBC micro:bit " -#~ "korrekt vom Computer konfiguriert werden " -#~ "kann. Dies kann einige Sekunden dauern." -#~ " Alternativ, versuche das Gerät aus- " -#~ "und wieder einzustecken oder Änderungen " -#~ "zu speichern und Mu neu zu " -#~ "starten, falls das Gerät weiterhin nicht" -#~ " gefunden wird." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Nicht unterstützter BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Dein Gerät ist neuer als diese " -#~ "Version von Mu. Bitte installiere die" -#~ " neuste Version von Mu um dieses " -#~ "Gerät zu benuzten.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Spiele \"{}\" auf den micro:bit auf." - -#~ msgid "Runtime" -#~ msgstr "Unbenannt" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Code auf den micro:bit kopiert." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Beim Aufspielen auf den micro:bit ist ein Problem aufgetreten." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Bitte entferne das Gerät erst wenn " -#~ "das Aufspielen abgeschlossen ist. Überprüfe" -#~ " das Protokoll für mehr Informationen." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Benutze CircuitPython auf einem Adafruit board." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Konnte kein angeschlossenes Gerät finden." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Python-Dateien für Adafruit CircuitPython " -#~ "Geräte werden auf dem Gerät gespeichert." -#~ " Um diese Dateien zu bearbeiten muss" -#~ " das Gerät angeschlossen sein. Bis " -#~ "ein Gerät angeschlossen ist, wird Mu " -#~ "diesen Ordner benuzten:\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "um Deinen Code zu speichern." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Hilfe für Mu in einem Browser anzeigen." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/es/LC_MESSAGES/mu.po b/mu/locale/es/LC_MESSAGES/mu.po index 9a874e0e9..d9890197f 100644 --- a/mu/locale/es/LC_MESSAGES/mu.po +++ b/mu/locale/es/LC_MESSAGES/mu.po @@ -1599,538 +1599,3 @@ msgstr "Muestra la música utilizada por Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Detén tu juego de Pygame Zero." - -#~ msgid "Logging to {}" -#~ msgstr "Registrando en {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "" -#~ "Para ejecutar el depurador, el script" -#~ " de Python requiere un nombre de " -#~ "archivo." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Archivos en tu micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}: {}]" - -#~ msgid "Your script is too long!" -#~ msgstr "¡Tu script es demasiado largo!" - -#~ msgid " Runtime: {}" -#~ msgstr " Interprete: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "¿Reducir el código Python antes de programar?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Reemplazar el interpretador de MicroPython " -#~ "incorporado en Mu con el siguiente " -#~ "archivo hex (vacío significa usar el " -#~ "valor predeterminado):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Configuración de BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Sistema de archivos en micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "El archivo ya existe; ¿Quieres sobrescribirlo?" - -#~ msgid "File already exists" -#~ msgstr "El archivo ya existe" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Copiando '{}' a micro:bit." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' copiado con éxito al micro:bit." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Eliminar (no se puede deshacer)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Eliminando '{}' del micro:bit." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' eliminado correctamente del micro:bit." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Obteniendo '{}' del micro:bit. Copiando a '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' copiado con éxito del micro:bit a tu ordenador." - -#~ msgid "Open in Mu" -#~ msgstr "Abrir en Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Abriendo '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Archivos en tu ordenador:" - -#~ msgid "Files on your computer:" -#~ msgstr "Archivos en tu ordenador:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Hubo un problema al obtener la " -#~ "lista de archivos del micro:bit. Por " -#~ "favor revisa los registros de Mu " -#~ "para obtener información técnica. " -#~ "Alternativamente, intenta desconectar y " -#~ "conectar su micro:bit y/o reiniciar Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Hubo un problema al copiar el " -#~ "archivo '{}' a el micro:bit. Por " -#~ "favor revisa los registros de Mu " -#~ "para obtener más información." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Hubo un problema al eliminar '{}' " -#~ "del micro:bit. Por favor revisa los " -#~ "registros de Mu para obtener más " -#~ "información." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Hubo un problema al obtener '{}' " -#~ "del micro:bit. Por favor revisa los " -#~ "registros de Mu para obtener más " -#~ "información." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "No se pudo encontrar el inteprete de MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "El interprete para micro:bit especificado " -#~ "(‘{}’) no existe. Por favor inténtalo" -#~ " de nuevo." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Archivos" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Accede al sistema de archivos en el micro:bit." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Usa el REPL para programar en vivo en el micro:bit." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "El REPL y el sistema de archivos no pueden funcionar al mismo tiempo." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "El REPL y el sistema de archivos" -#~ " usan la misma conexión serial de " -#~ "USB. Solo uno puede estar activo " -#~ "en cualquier momento. Apaga el sistema" -#~ " de archivos e inténtalo de nuevo." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "" -#~ "El trazador y el sistema de " -#~ "archivos no pueden funcionar al mismo" -#~ " tiempo." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "El trazador y el sistema de " -#~ "archivos utilizan la misma conexión " -#~ "serial USB. Solo uno puede estar " -#~ "activo al mismo tiempo. Apaga el " -#~ "sistema de archivos e inténtalo de " -#~ "nuevo." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "El sistema de archivos no puede " -#~ "funcionar al mismo tiempo que el " -#~ "REPL o trazador." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "El sistema de archivos, el REPL y" -#~ " el trazador usan la misma conexión" -#~ " serial de USB. Cierra el REPL " -#~ "y el trazador e inténtalo de " -#~ "nuevo." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "No se pudo encontrar un dispositivo conectado." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Asegúrate de que el dispositivo esta conectado a este ordenador.\n" -#~ "\n" -#~ "El dispositivo debe tener MicroPython " -#~ "programado antes de que el sistema " -#~ "de archivos funcione.\n" -#~ "\n" -#~ "Por último, presiona el botón de " -#~ "reinicio del dispositivo y espera unos" -#~ " segundos antes de volver a " -#~ "intentarlo." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Escribe MicroPython para BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Flash" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Programa tu código en el micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Accede al sistema de archivos en el micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Usa el REPL para programar en vivo en el micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Tu script es demasiado largo y el minificador no está disponible" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Tu script es demasiado largo y el minificador no está disponible" - -#~ msgid "Problem minifying script" -#~ msgstr "Problema con el script" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "¡Nuestro minificador lo intentó pero tu script es demasiado largo!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "No se puede programar \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "No se pudo encontrar un BBC micro:bit conectado." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Asegúrate de dejar tiempo suficiente " -#~ "para que el BBC micro:bit se " -#~ "conecte y sea configurado correctamente " -#~ "por tu ordenador. Esto puede tomar " -#~ "varios segundos. Alternativamente, si el " -#~ "dispositivo sigue sin descubrirse intenta " -#~ "desconectar y volver a conectarlo, o " -#~ "guarda tu trabajo y reinicia Mu." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "BBC micro:bit no soportado." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Tu dispositivo es mas nuevo que " -#~ "esta versión de Mu. Por favor, " -#~ "actualiza a la ultima versión de " -#~ "Mu soportar este dispositvo.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Programando \"{}\" en el micro:bit." - -#~ msgid "Runtime" -#~ msgstr "sin titulo" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Código copiado al micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Hubo un problema al programar el micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Por favor, no desconectes el dispositivo" -#~ " hasta que la programación se haya" -#~ " completado. Por favor revisa los " -#~ "registros para más información." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Usa la linea de placas CircuitPython de Adafruit." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "No se pudo encontrar un dispositivo conectado." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Los archivos Python para Adafruit " -#~ "CircuitPython se almacenan en el " -#~ "dispositivo. Por lo tanto, para editar" -#~ " estos archivos, debes tener el " -#~ "dispositivo conectado. Hasta que no " -#~ "conectes uno, Mu usará este directorio:" -#~ "\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "... para almacenar su código." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Mostrar ayuda de Mu en un navegador." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/fr/LC_MESSAGES/mu.po b/mu/locale/fr/LC_MESSAGES/mu.po index 17d1c3fab..8a228e439 100644 --- a/mu/locale/fr/LC_MESSAGES/mu.po +++ b/mu/locale/fr/LC_MESSAGES/mu.po @@ -1603,898 +1603,3 @@ msgstr "Montre les musiques utilisées par Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Arrête ton jeu Pygame Zero." - -#~ msgid "Please do not disconnect the device until flashing has completed." -#~ msgstr "" -#~ "Merci de ne pas déconnecté le " -#~ "périphérique tant que le flashage n'est" -#~ " pas terminé." - -#~ msgid "Builtins" -#~ msgstr "Intégrations" - -#~ msgid "Module level" -#~ msgstr "Niveau du module" - -#~ msgid "%b %d, %Y" -#~ msgstr "%d %b %Y" - -#~ msgid "General Index" -#~ msgstr "Index Général" - -#~ msgid "index" -#~ msgstr "index" - -#~ msgid "next" -#~ msgstr "suivant" - -#~ msgid "previous" -#~ msgstr "précédent" - -#~ msgid " (in " -#~ msgstr " (dans " - -#~ msgid "Section author: " -#~ msgstr "Auteur de la section: " - -#~ msgid "Module author: " -#~ msgstr "Auteur du module: " - -#~ msgid "Code author: " -#~ msgstr "Auteur du code: " - -#~ msgid "Author: " -#~ msgstr "Auteur: " - -#~ msgid "%s %s" -#~ msgstr "%s %s" - -#~ msgid "%s (C function)" -#~ msgstr "%s (fonction C)" - -#~ msgid "%s (C member)" -#~ msgstr "%s (membre C)" - -#~ msgid "%s (C macro)" -#~ msgstr "%s (macro C)" - -#~ msgid "%s (C type)" -#~ msgstr "%s (type C)" - -#~ msgid "%s (C variable)" -#~ msgstr "%s (variable C)" - -#~ msgid "%s (C++ type)" -#~ msgstr "%s (type C++)" - -#~ msgid "%s (C++ concept)" -#~ msgstr "%s (concept C++)" - -#~ msgid "%s (C++ member)" -#~ msgstr "%s (membre C++)" - -#~ msgid "%s (C++ function)" -#~ msgstr "%s (fonction C++)" - -#~ msgid "%s (C++ class)" -#~ msgstr "%s (classe C++)" - -#~ msgid "%s (C++ enum)" -#~ msgstr "%s (énum C++)" - -#~ msgid "%s (C++ enumerator)" -#~ msgstr "%s (énumerateur C++)" - -#~ msgid "%s() (built-in function)" -#~ msgstr "%s() (fonction intégrée)" - -#~ msgid "%s() (%s method)" -#~ msgstr "%s() (méthode %s)" - -#~ msgid "%s() (class)" -#~ msgstr "%s() (classe)" - -#~ msgid "%s (global variable or constant)" -#~ msgstr "%s (variable globale ou constante)" - -#~ msgid "%s (%s attribute)" -#~ msgstr "%s ( attribut %s)" - -#~ msgid "%s (module)" -#~ msgstr "%s (module)" - -#~ msgid "%s() (in module %s)" -#~ msgstr "%s() (dans le module %s)" - -#~ msgid "%s (built-in variable)" -#~ msgstr "%s (built-in variable)" - -#~ msgid "%s (in module %s)" -#~ msgstr "%s (dans le module %s)" - -#~ msgid "%s (built-in class)" -#~ msgstr "%s (classe intégrée)" - -#~ msgid "%s (class in %s)" -#~ msgstr "%s (classe dans %s)" - -#~ msgid "%s() (%s.%s method)" -#~ msgstr "%s() (méthode %s.%s)" - -#~ msgid "%s() (%s.%s static method)" -#~ msgstr "%s() (méthode statique %s.%s)" - -#~ msgid "%s() (%s static method)" -#~ msgstr "%s() (méthode statique %s)" - -#~ msgid "%s() (%s.%s class method)" -#~ msgstr "%s() (méthode de classe %s.%s)" - -#~ msgid "%s() (%s class method)" -#~ msgstr "%s() (méthode de classe %s)" - -#~ msgid "%s (%s.%s attribute)" -#~ msgstr "%s (attribut %s.%s)" - -#~ msgid "Deprecated" -#~ msgstr "Obsolète" - -#~ msgid " (deprecated)" -#~ msgstr "(obsolète)" - -#~ msgid "%s (directive)" -#~ msgstr "%s (directive)" - -#~ msgid "%s (role)" -#~ msgstr "%s (role)" - -#~ msgid "environment variable; %s" -#~ msgstr " variable d'environnement; %s" - -#~ msgid "%scommand line option; %s" -#~ msgstr "%s option de la ligne de commande; %s" - -#~ msgid "see %s" -#~ msgstr "voir %s" - -#~ msgid "see also %s" -#~ msgstr "voir aussi %s" - -#~ msgid "Symbols" -#~ msgstr "Symboles" - -#~ msgid "Bases: %s" -#~ msgstr "Bases: %s" - -#~ msgid "alias of :class:`%s`" -#~ msgstr "alias de la :classe:`%s`" - -#~ msgid "missing '+' or '-' in '%s' option." -#~ msgstr "'+' ou '-' manquants dans l'option '%s'." - -#~ msgid "'%s' is not a valid option." -#~ msgstr "'%s' n'est pas une option valide." - -#~ msgid "'%s' is not a valid pyversion option" -#~ msgstr "'%s' n'est pas une option pyversion valide" - -#~ msgid "[graph: %s]" -#~ msgstr "[graphe: %s]" - -#~ msgid "[graph]" -#~ msgstr "[graphe]" - -#~ msgid "Permalink to this equation" -#~ msgstr "Permalien vers cette équation" - -#~ msgid "(in %s v%s)" -#~ msgstr "(dans %s v%s)" - -#~ msgid "(in %s)" -#~ msgstr "(dans %s)" - -#~ msgid "[source]" -#~ msgstr "[source]" - -#~ msgid "Todo" -#~ msgstr "AFaire" - -#~ msgid "<>" -#~ msgstr "<>" - -#~ msgid "(The <> is located in %s, line %d.)" -#~ msgstr "(L' <> est située dans %s, ligne %d.)" - -#~ msgid "original entry" -#~ msgstr "entrée originale" - -#~ msgid "[docs]" -#~ msgstr "[docs]" - -#~ msgid "Module code" -#~ msgstr "Code du module" - -#~ msgid "

Source code for %s

" -#~ msgstr "

Code source de %s

" - -#~ msgid "Overview: module code" -#~ msgstr "Généralités: code du module" - -#~ msgid "

All modules for which code is available

" -#~ msgstr "

Tous les modules pour lesquels le code est disponible

" - -#~ msgid "Python Enhancement Proposals; PEP %s" -#~ msgstr "Propositions d'Amélioration de Python; PEP %s" - -#~ msgid "Permalink to this definition" -#~ msgstr "Permalien vers cette définition" - -#~ msgid "Permalink to this headline" -#~ msgstr "Permalien vers cet entête" - -#~ msgid "Permalink to this table" -#~ msgstr "Permalien vers ce tableau" - -#~ msgid "Permalink to this code" -#~ msgstr "Permalien vers ce programme" - -#~ msgid "Permalink to this image" -#~ msgstr "Permalien vers cet image" - -#~ msgid "Permalink to this toctree" -#~ msgstr "Permalien vers ce sommaire" - -#~ msgid "Index" -#~ msgstr "Index" - -#~ msgid "Release" -#~ msgstr "Version" - -#~ msgid "continued from previous page" -#~ msgstr "suite de la page précédente" - -#~ msgid "continues on next page" -#~ msgstr "suite sur le page suivante" - -#~ msgid "page" -#~ msgstr "page" - -#~ msgid "Unknown configure key: latex_elements[%r] is ignored." -#~ msgstr "Clé de configuration inconnue: latex_elements[%r] ignorée." - -#~ msgid "Footnotes" -#~ msgstr "Notes de bas de page" - -#~ msgid "[image: %s]" -#~ msgstr "[image: %s]" - -#~ msgid "[image]" -#~ msgstr "[image]" - -#~ msgid "April" -#~ msgstr "Avril" - -#~ msgid "February" -#~ msgstr "Février" - -#~ msgid "January" -#~ msgstr "Janvier" - -#~ msgid "March" -#~ msgstr "Mars" - -#~ msgid "August" -#~ msgstr "Août" - -#~ msgid "July" -#~ msgstr "Juillet" - -#~ msgid "June" -#~ msgstr "Juin" - -#~ msgid "May" -#~ msgstr "Mai" - -#~ msgid "December" -#~ msgstr "Décembre" - -#~ msgid "November" -#~ msgstr "Novembre" - -#~ msgid "October" -#~ msgstr "Octobre" - -#~ msgid "September" -#~ msgstr "Septembre" - -#~ msgid "Monday" -#~ msgstr "Lundi" - -#~ msgid "Thursday" -#~ msgstr "Jeudi" - -#~ msgid "Tuesday" -#~ msgstr "Mardi" - -#~ msgid "Wednesday" -#~ msgstr "Mercredi" - -#~ msgid "Saturday" -#~ msgstr "Samedi" - -#~ msgid "Sunday" -#~ msgstr "Dimanche" - -#~ msgid "%(time)s" -#~ msgstr "%(time)s" - -#~ msgid "yesterday" -#~ msgstr "hier" - -#~ msgid "yesterday at %(time)s" -#~ msgstr "hier à %(time)s" - -#~ msgid "%(weekday)s" -#~ msgstr "%(weekday)s" - -#~ msgid "%(weekday)s at %(time)s" -#~ msgstr "%(weekday)s à %(time)s" - -#~ msgid "%(month_name)s %(day)s" -#~ msgstr "%(day)s %(month_name)s" - -#~ msgid "%(month_name)s %(day)s at %(time)s" -#~ msgstr "%(day)s %(month_name)s à %(time)s" - -#~ msgid "%(month_name)s %(day)s, %(year)s" -#~ msgstr "%(day)s %(month_name)s %(year)s" - -#~ msgid "%(month_name)s %(day)s, %(year)s at %(time)s" -#~ msgstr "%(day)s %(month_name)s %(year)s à %(time)s" - -#~ msgid "%(weekday)s, %(month_name)s %(day)s" -#~ msgstr "%(weekday)s %(day)s %(month_name)s " - -#~ msgid "%(commas)s and %(last)s" -#~ msgstr "%(commas)s et %(last)s" - -#~ msgid "Logging to {}" -#~ msgstr "Logguer dans {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "Le débogueur a besoin que tu nommes le script Python pour se lancer." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Fichiers sur ta micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Ton programme est trop long!" - -#~ msgid " Runtime: {}" -#~ msgstr "Exécution: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Compresser le code Python avant le flasher?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Remplace l'exécutable MicroPython par le " -#~ "fichier hex suivant (vide signifie " -#~ "utilise celui par défaut):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Configuration BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Système de fichier micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Le fichier existe déja: faut-il l'écraser?" - -#~ msgid "File already exists" -#~ msgstr "Le fichier existe déjà" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Copie '{}' sur la micro:bit." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' copié avec succès sur la micro:bit." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Supprimer (retour en arrière impossible)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Supprime '{}' de la micro:bit" - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' supprimé avec succès de la micro:bit." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Récupère '{}' depuis la micro:bit. Copie dans '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' copié avec succès de la micro:bit sur l'ordinateur." - -#~ msgid "Open in Mu" -#~ msgstr "Ouvrir avec Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Ouverture de '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Fichiers sur ton ordinateur:" - -#~ msgid "Files on your computer:" -#~ msgstr "Fichiers sur ton ordinateur:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Un problème est survenu pendant le " -#~ "listage des fichiers sur la micro:bit." -#~ " Merci de vérifier les logs de " -#~ "Mu pour avoir plus d'informations. " -#~ "Sinon, essaie de débrancher/rebrancher ta " -#~ "micro:bit, ou bien de redémarrer Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Un problème est survenu pendant la " -#~ "copie du fichier '{}' sur la " -#~ "micro:bit. Merci de vérifier les logs" -#~ " de Mu pour avoir plus " -#~ "d'informations." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Un problème est survenu pendant la " -#~ "suppression du fichier '{}' de la " -#~ "micro:bit. Merci de vérifier les logs" -#~ " de Mu pour avoir plus " -#~ "d'informations." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Un problème est survenu pendant la " -#~ "lecture du fichier '{}' depuis la " -#~ "micro:bit. Merci de vérifier les logs" -#~ " de Mu pour avoir plus " -#~ "d'informations." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "" -#~ "The file contains characters Mu expects" -#~ " to be encoded as {0} or as " -#~ "the computer's default encoding {1}, but" -#~ " which are encoded in some other " -#~ "way.\n" -#~ "\n" -#~ "If this file was saved in another" -#~ " application, re-save the file via" -#~ " the 'Save as' option and set " -#~ "the encoding to {0}" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Impossible de trouver l'exécutable MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Fichiers" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Accéder au système de fichiers de la micro:bit" - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Utilise le REPL pour programmer directement sur la micro:bit" - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "" -#~ "Le REPL et le système de fichiers" -#~ " ne peuvent pas fonctionner en même" -#~ " temps." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "Le REPL et le système de fichiers" -#~ " utilisent tous les deux la même " -#~ "connexion USB série. Un seul des " -#~ "deux peut être actif à la fois." -#~ " Désactive le système de fichier et" -#~ " ré-essaie." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "" -#~ "Le grapheur et le systèle de " -#~ "fichiers ne peuvent pas fonctionner en" -#~ " même temps." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Le grapheur et le système de " -#~ "fichiers utilisent la même connexion USB" -#~ " série. Un seul des deux peut " -#~ "être active à la fois. Désactive " -#~ "le système de fichiers et essaie à" -#~ " nouveau." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "Le système de fichiers ne peut pas" -#~ " fonctionner en même temps que le " -#~ "REPL ou le grapheur." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Le système de fichiers, le REPL et" -#~ " le grapheur utilisent la même " -#~ "connexion USB série. Désactive le REPL" -#~ " et le grapheur et essaie à " -#~ "nouveau." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Impossible de trouver un périphérique connecté." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Merci de vérifier que le périphérique est connecté à l'ordinateur.\n" -#~ "\n" -#~ "Le périphérique doit avoir MicroPython " -#~ "flashé dessus pour que le système " -#~ "de fichier fonctionne.\n" -#~ "\n" -#~ "Enfin, appuie sur le bouton 'reset' " -#~ "du périphérique et attend quelques " -#~ "secondes avant de ré-essayer." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Ecris un programme MicroPython pour la micro:bit" - -#~ msgid "Flash" -#~ msgstr "Flasher" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Flashe ton programme sur la micro:bit" - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Accéder au système de fichiers de la micro:bit" - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Utilise le REPL pour programmer directement sur la micro:bit" - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ton programme est trop long et le compresseur n'est pas disponible." - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ton programme est trop long et le compresseur n'est pas disponible." - -#~ msgid "Problem minifying script" -#~ msgstr "Problème avec le script" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "On a essayé de le compresser mais ton programme est trop long!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Impossible de flasher \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Impossible de trouver une micro:bit connectée" - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Merci de laisser suffisamment de temps" -#~ " à la micro:bit connectée à ton " -#~ "ordinateur. Ceci peut prendre plusieurs " -#~ "secondes. Si le périphérique n'apparaît " -#~ "toujours pas, essaye de débrancher/rebrancher" -#~ " le périphérique ou d'enregistrer ton " -#~ "travail et redémarrer Mu." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "" - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "En train de flasher \"{}\" sur la micro:bit" - -#~ msgid "Runtime" -#~ msgstr "sans titre" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Flashe ton programme sur la micro:bit" - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Un problème est survenu pendant le flashage de la micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Ne pas déconnecter le périphériques tant" -#~ " que le flashage n'est pas terminé." -#~ " Regarde les logs pour plus " -#~ "d'informations." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Utilise CircuitPython avec la gamme de cartes Adafruit." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Impossible de trouver un périphérique connecté." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Le fichiers Python pour les " -#~ "périphériques Adafruit CircuitPython sont " -#~ "stockés directement sur le périphérique.\n" -#~ "" -#~ "Ainsi, pour pouvoir les modifier il " -#~ "faut avoir un périphérique connecté. En" -#~ " attendant qu'un périphérique soit " -#~ "connecté, Mu utilisera le dossier:\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "... pour ton stocker ton programme." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Montre l'aide à propos de Mu dans un navigateur." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/ja/LC_MESSAGES/mu.po b/mu/locale/ja/LC_MESSAGES/mu.po index d740cf131..732d6ed94 100644 --- a/mu/locale/ja/LC_MESSAGES/mu.po +++ b/mu/locale/ja/LC_MESSAGES/mu.po @@ -1544,461 +1544,3 @@ msgstr "Pygame Zero で使う音楽を表示します。" #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Pygame Zero ゲームを停止します。" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "転送の前に Python コードを縮小しますか?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "組込みの MicroPython ランタイムを以下の hex ファイルで上書きする(空であればデフォルトのものを利用):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "MicroPython をデバイスに転送する方法" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. デバイスタイプを選択(ESP8266 または ESP32)
 2. https://micropython.org/download " -#~ "からファームウェアをダウンロード
 3. デバイスを接続
 4. " -#~ "「ブラウズ」ボタンを使って .bin ファイルを選択
 5. " -#~ "「ファームウェアの消去と転送」を押す" - -#~ msgid "Device:" -#~ msgstr "デバイス:" - -#~ msgid "Choose device type:" -#~ msgstr "デバイス種別の選択:" - -#~ msgid "Firmware (.bin):" -#~ msgstr "ファームウェア(.bin):" - -#~ msgid "Browse" -#~ msgstr "ブラウズ" - -#~ msgid "Erase && write firmware" -#~ msgstr "ファームウェアの消去と転送" - -#~ msgid "Select MicroPython firmware (.bin)" -#~ msgstr "MicroPython ファームウェアの選択(.bin)" - -#~ msgid "Firmware (*.bin)" -#~ msgstr "ファームウェア(.bin)" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit 設定" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "ESP ファームウェア転送" - -#~ msgid "Mu {}" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "ファイルシステム: " - -#~ msgid "Mu" -#~ msgstr "" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "ファイルが既にあります。上書きしますか?" - -#~ msgid "File already exists" -#~ msgstr "ファイルが既にあります" - -#~ msgid "Copying '{}' to device." -#~ msgstr "'{}' をデバイスにコピー中。" - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' のデバイスへのコピーが成功しました。" - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "削除 (元に戻せません)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "デバイスから '{}' を削除中。" - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' をデバイスから削除するのに成功しました。" - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "デバイスから '{}' を取得中。{} にコピー中。" - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "デバイスからコンピュータへの '{}' のコピーが成功しました。" - -#~ msgid "Open in Mu" -#~ msgstr "Mu で開く" - -#~ msgid "Write to main.py on device" -#~ msgstr "main.py をデバイスに書き込む" - -#~ msgid "Opening '{}'" -#~ msgstr "'{}' を読込み中" - -#~ msgid "Files on your device:" -#~ msgstr "デバイスのファイル:" - -#~ msgid "Files on your computer:" -#~ msgstr "コンピュータのファイル:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "デバイス内のファイルのリストを取得する際に問題が発生しました。技術的な情報は Mu " -#~ "のログを確認してください。あるいは、デバイスのプラグを抜き差しするか、Muを再起動してみてください。" - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "デバイスにファイル '{}' をコピーしている際に問題が発生しました。詳しくは Mu のログを確認してください。" - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "デバイス内のファイル '{}' を削除している際にに問題が発生しました。詳しくは Mu のログを確認してください。" - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "デバイス内のファイル '{}' を取得している際に問題が発生しました。詳しくは Mu のログを確認してください。" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "MicroPython ランタイムが見つかりません。" - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "指定した micro:bit ランタイムは存在しません。もう一度やり直してください。" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "ESP8266/ESP32 ボードの MicroPython を編集。" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "REPL を介して {board_name} 上で直にコードを実行します。" - -#~ msgid "Files" -#~ msgstr "ファイル" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "{board_name} にあるファイルにアクセスします。" - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "{board_name} を対話モードで利用します。" - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL とファイルシステムは同時に利用できません。" - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL とファイルシステムはどちらも USB " -#~ "シリアル接続を利用しますが、有効にできるのは常にどちらか一方です。ファイルシステムの利用を止めて、もう一度試してください。" - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "プロッターとファイルシステムは同時に利用できません。" - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "プロッターとファイルシステムはどちらも USB " -#~ "シリアル接続を利用しますが、有効にできるのは常にどちらか一方です。ファイルシステムの利用を止めて、もう一度試してください。" - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "アクティブなエディタタブがなければ何も実行できません。" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "現在開いているタブの内容をデバイスに転送中。タブが何も開かれていないようです。" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "ファイルシステムは REPL やプロッターと同時に利用できません。" - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "ファイルシステムと REPL とプロッターは同じ USB シリアル接続を利用します。REPL とプロッターの利用を止めて、再度試してください。" - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "デバイスが繋げられていないようです。" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "デバイスがこのコンピュータに繋げられているかを確認してください。\n" -#~ "\n" -#~ "ファイルシステムが動作するには、MicroPython がデバイスに転送されている必要があります。\n" -#~ "\n" -#~ "最後に、デバイスのリセットボタンを押してから、再度試してください。" - -#~ msgid "{board_name} board" -#~ msgstr "{board_name} ボード" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Lego Spike デバイスで直接 MicroPython を編集。" - -#~ msgid "BBC micro:bit" -#~ msgstr "" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "BBC micro:bit の MicroPython を編集。" - -#~ msgid "Flash" -#~ msgstr "転送" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "コードを micro:bit に転送します。" - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "micro:bit にあるファイルにアクセスします。" - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "micro:bit を対話モードで利用します。" - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "スクリプトが長すぎて縮小できません" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "スクリプトが長すぎて縮小できません" - -#~ msgid "Problem minifying script" -#~ msgstr "スクリプトに問題があります" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "縮小しようとしましたが、スクリプトが長すぎます!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "\"{}\" を転送できません" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "BBC micro:bit が繋げられていないようです。" - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "BBC micro:bit " -#~ "を正しく繋げている場合でも、コンピュータがそれを認識するのに十分な時間をおいてください。これには数秒かかることがあります。それでもデバイスが認識されない場合は、デバイス一度取り外して再度繋げるか、スクリプトを保存して" -#~ " Mu を再起動してみてください。" - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "ローカルディレクトリにカスタム hex ファイルを保存できません。" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "カスタム hex ファイルが設定されている場合、最終的な hex ファイルを保存するためにローカルディレクトリは使えません。" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "micro:bit ポートなしではカスタム hex ファイルを利用できません。" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Mu は micro:bit のシリアルポートを検出できませんでした。通常は Mu " -#~ "が Python コードを hex " -#~ "に注入して転送できるので、これは問題ありません。しかし、カスタム hex ファイルの場合はダメです。" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "未サポートの BBC micro:bit。" - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "デバイスがこの Mu のバージョンで扱うには新しすぎます。このデバイスをサポートするために Mu " -#~ "を最新バージョンにアップデートしてください。\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "micro:bit に \"{}\" を転送中。" - -#~ msgid "Runtime" -#~ msgstr "ランタイム" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "micro:bit にコードをコピーしました。" - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "micro:bit への転送で問題が発生しました。" - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "転送が完了するまでデバイスを取り外さないでください。詳しくは Mu のログを確認してください。" - -#~ msgid "micro:bit" -#~ msgstr "" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Raspberry Pi Pico の MicroPython を編集。" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards." -#~ msgstr "ボードの Pyboard ラインで MicroPython を利用。" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "デバイスが繋げられていないようです。" - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "PyBoard MicroPython デバイス用の Python " -#~ "ファイルはデバイスに保存されています。したがって、これらのファイルを編集するには、デバイスが接続されている必要があります。デバイスを接続するまで、Mu" -#~ " はコードを格納するために次のディレクトリを使います:\n" -#~ "\n" -#~ " {}" - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Web フレームワーク「Flask」でシンプルな Web サイトを構築。" - -#~ msgid "Run the web server." -#~ msgstr "web サーバを実行します。" - -#~ msgid "Open your website in a browser." -#~ msgstr "Mu のヘルプをWebブラウザで表示します。" - -#~ msgid "Templates" -#~ msgstr "テンプレート" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "web サイトで使う HTML テンプレートを読み込みます。" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "web サイトで使う CSS ファイルを読み込みます。" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "web サイトで使う画像のあるディレクトリを開きます。" - -#~ msgid "Stop the web server." -#~ msgstr "web サーバを停止します。" - -#~ msgid "This is not a Python file!" -#~ msgstr "これは Python ファイルではありません!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "Mu は Python ファイルしか扱えません。Mu の現在のタブが Web" -#~ " アプリケーションのタブであることを確認してから、もう一度試してみてください。" - -#~ msgid "Cannot find template directory!" -#~ msgstr "テンプレートのディレクトリが見つかりません!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Web アプリケーションを動かすには、Webアプリケーションの Python コードと同じ場所に " -#~ "'template' ディレクトリがある必要があります。これを修正して、もう一度試してみてください。(ヒント: Mu" -#~ " は `templates` ディレクトリがここにあると思っていました: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Web サイトを開ません - サーバが動作していません。" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "ブラウザで Web サイトを表示するには、ローカルの Web " -#~ "サーバーが起動している必要があります。「実行」ボタンをクリックしてサーバーを起動して、もう一度試してください。" - diff --git a/mu/locale/nl/LC_MESSAGES/mu.po b/mu/locale/nl/LC_MESSAGES/mu.po index ea406c16b..e3d3532b5 100644 --- a/mu/locale/nl/LC_MESSAGES/mu.po +++ b/mu/locale/nl/LC_MESSAGES/mu.po @@ -1619,588 +1619,3 @@ msgstr "Laat de muziek zien die door Pygame Zero wordt gebruikt." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Stop je Pygame Zero-spel." - -#~ msgctxt "dialogs|ESPFirwareFlasherWidget" -#~ msgid "Browse" -#~ msgstr "Bladeren" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Python code verkleinen voor het flashen?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Overschrijf de ingebouwde MicroPython-runtime" -#~ " met het volgende hex-bestand (leeg" -#~ " betekent gebruik de standaard):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Hoe kunt u MicroPython flashen naar uw apparaat" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. Bepaal het type apparaat " -#~ "(ESP8266 of ESP32)
 2. Download " -#~ "firmware van de https://micropython.org/download
 3." -#~ " Sluit uw apparaat aan
 4. Laad" -#~ " het .bin-bestand hieronder met de" -#~ " knop 'Bladeren'
 5. Druk op 'Wis" -#~ " & schrijf firmware'" - -#~ msgid "Device:" -#~ msgstr "Apparaat:" - -#~ msgid "Choose device type:" -#~ msgstr "Kies apparaattype:" - -#~ msgid "Firmware (.bin):" -#~ msgstr "Firmware (.bin):" - -#~ msgid "Browse" -#~ msgstr "Bladeren" - -#~ msgid "Erase && write firmware" -#~ msgstr "Wis && schrijf firmware" - -#~ msgid "Select MicroPython firmware (.bin)" -#~ msgstr "Selecteer MicroPython-firmware (.bin)" - -#~ msgid "Firmware (*.bin)" -#~ msgstr "Firmware (*.bin)" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit-instellingen" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "ESP Firmware flasher" - -#~ msgid "Filesystem on " -#~ msgstr "Bestandssysteem op " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Bestand bestaat al; bestand overschrijven?" - -#~ msgid "File already exists" -#~ msgstr "Bestand bestaat al" - -#~ msgid "Copying '{}' to device." -#~ msgstr "'{}' kopi�ren naar apparaat." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' succesvol gekopieerd naar apparaat." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Verwijderen (kan niet ongedaan worden gemaakt)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "'{}' van apparaat verwijderen." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' succesvol verwijderd van apparaat." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "'{}' ophalen van het apparaat. kopi�ren naar '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' is met succes van het apparaat naar uw computer gekopieerd." - -#~ msgid "Open in Mu" -#~ msgstr "Open in Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Schrijf naar main.py op apparaat" - -#~ msgid "Opening '{}'" -#~ msgstr "'{}' openen" - -#~ msgid "Files on your device:" -#~ msgstr "Bestanden op uw apparaat:" - -#~ msgid "Files on your computer:" -#~ msgstr "Bestanden op uw computer:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Er is een probleem opgetreden bij " -#~ "het ophalen van de lijst met " -#~ "bestanden op het apparaat. Raadpleeg de" -#~ " logboeken van Mu voor technische " -#~ "informatie. U kunt ook proberen uw " -#~ "apparaat los te koppelen/aan te sluiten" -#~ " en/of Mu opnieuw op te starten." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Er is een probleem opgetreden bij " -#~ "het kopi�ren van het bestand '{}' " -#~ "naar het apparaat. Raadpleeg de " -#~ "logboeken van Mu voor meer informatie." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Er is een probleem opgetreden bij " -#~ "het verwijderen van '{}' van het " -#~ "apparaat. Raadpleeg de logboeken van Mu" -#~ " voor meer informatie." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Er is een probleem opgetreden bij " -#~ "het ophalen van '{}' van het " -#~ "apparaat. Raadpleeg de logboeken van Mu" -#~ " voor meer informatie." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Kan de MicroPython-runtime niet vinden." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "De micro:bit runtime die je hebt " -#~ "opgegeven ('{}') bestaat niet. Probeer " -#~ "het opnieuw." - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Schrijf MicroPython op ESP8266/ESP32-kaarten." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Voer je code rechtstreeks uit op de {board_name} via de REPL." - -#~ msgid "Files" -#~ msgstr "Bestanden" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Open het bestandssysteem op {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Gebruik de REPL om live te coderen op de {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL en bestandssysteem kunnen niet tegelijkertijd werken." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "De REPL en het bestandssysteem gebruiken" -#~ " beide dezelfde seri�le USB-verbinding. " -#~ "Er kan er maar �en actief zijn." -#~ " Schakel het bestandssysteem uit en " -#~ "probeer het opnieuw." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "De plotter en het bestandssysteem kunnen niet tegelijkertijd werken." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "De plotter en het bestandssysteem " -#~ "gebruiken beide dezelfde seri�le USB-" -#~ "aansluiting. Er kan er maar ��n " -#~ "actief zijn. Schakel het bestandssysteem " -#~ "uit en probeer het opnieuw." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Kan niets uitvoeren zonder actieve editortabbladen." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Met Running wordt de inhoud van " -#~ "het huidige tabblad naar het apparaat" -#~ " overgebracht. Het lijkt alsof je " -#~ "geen tabbladen open hebt staan." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "Het bestandssysteem kan niet tegelijkertijd" -#~ " met de REPL of plotter werken." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Het bestandssysteem en de REPL en " -#~ "plotter gebruiken dezelfde seri�le USB-" -#~ "verbinding. Schakel de REPL en plotter" -#~ " uit en probeer het opnieuw." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Kan een aangesloten {board_name} niet vinden" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Zorg ervoor dat het apparaat is aangesloten op deze computer.\n" -#~ "\n" -#~ "Op het apparaat moet MicroPython zijn" -#~ " geflashed voordat het bestandssysteem " -#~ "werkt.\n" -#~ "\n" -#~ "Druk ten slotte op de resetknop " -#~ "van het apparaat en wacht een paar" -#~ " seconden voordat u het opnieuw " -#~ "probeert." - -#~ msgid "{board_name} board" -#~ msgstr "{board_name} bord" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Schrijf MicroPython rechtstreeks op Lego Spike-apparaten." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Schrijf MicroPython voor de BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Flash" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Flash uw code op de micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Open het bestandssysteem op de micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Gebruik de REPL om live te coderen op de micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Je script is te lang en codeminificatie is uitgeschakeld" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Je script is te lang en de minifier is niet beschikbaar" - -#~ msgid "Problem minifying script" -#~ msgstr "Probleem met het verkleinen van script" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Onze minifier heeft het geprobeerd, maar je script is te lang!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Kan \"{}\" niet flashen" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Kan een aangesloten BBC micro:bit niet vinden." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Zorg ervoor dat u voldoende tijd " -#~ "overlaat om de BBC micro:bit te " -#~ "bevestigen en correct te configureren " -#~ "door uw computer. Dit kan enkele " -#~ "seconden duren. U kunt ook proberen " -#~ "het apparaat te verwijderen en opnieuw" -#~ " te bevestigen of uw werk op te" -#~ " slaan en Mu opnieuw te starten " -#~ "als het apparaat niet wordt gevonden." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "Kan een aangepast hex-bestand niet opslaan in een lokale map." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "" -#~ "Wanneer een aangepast hex-bestand is " -#~ "geconfigureerd in de instellingen, kan " -#~ "een lokale map niet worden gebruikt " -#~ "om het uiteindelijke hex-bestand op " -#~ "te slaan." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "Kan geen aangepast hex-bestand gebruiken zonder micro:bit-poort." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Mu kon de micro:bit seri�le poort " -#~ "niet detecteren. Normaal gesproken is " -#~ "dit in orde, omdat Mu de " -#~ "Python-code in de hex kan injecteren" -#~ " om te flashen. Dit kan echter " -#~ "niet worden gedaan met een aangepast " -#~ "hex-bestand." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Niet-ondersteunde BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Je apparaat is nieuwer dan deze " -#~ "versie van Mu. Werk Mu bij naar" -#~ " de nieuwste versie om dit apparaat" -#~ " te ondersteunen.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "De micro:bit flashen" - -#~ msgid "Runtime" -#~ msgstr "Runtime" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Code gekopieerd naar micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Er is een probleem opgetreden bij het flashen van de micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Koppel het apparaat niet los voordat " -#~ "het flashen is voltooid. Raadpleeg de" -#~ " logboeken voor meer informatie." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Schrijf MicroPython rechtstreeks op een Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards." -#~ msgstr "Gebruik MicroPython op de Pyboard-lijn van boards." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Kon geen aangesloten PyBoard-apparaat vinden." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Python-bestanden voor PyBoard MicroPython-" -#~ "apparaten worden op het apparaat " -#~ "opgeslagen. Om deze bestanden te kunnen" -#~ " bewerken, moet het apparaat daarom " -#~ "zijn aangesloten. Totdat u een apparaat" -#~ " aansluit, gebruikt Mu de map die " -#~ "u hier vindt:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...om uw code op te slaan." - -#~ msgid "Snek" -#~ msgstr "Snek" - -#~ msgid "Write code for boards running Snek." -#~ msgstr "Schrijf code voor boards waarop Snek draait." - -#~ msgid "Put" -#~ msgstr "Opzetten" - -#~ msgid "Put the current program to the device." -#~ msgstr "Zet het huidige programma op het apparaat." - -#~ msgid "Get" -#~ msgstr "Afhalen" - -#~ msgid "Get the current program from the device." -#~ msgstr "Haal het huidige programma van het apparaat." - -#~ msgid "There is un-saved work, 'get' will cause you to lose it." -#~ msgstr "" -#~ "Er is niet-opgeslagen werk, 'afhalen'" -#~ " zorgt ervoor dat je het kwijtraakt." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "It must have a version of Snek " -#~ "flashed onto it before the REPL " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Zorg ervoor dat het apparaat is aangesloten op deze computer.\n" -#~ "\n" -#~ "Er moet een versie van Snek op geflasht zijn voordat de REPL werkt.\n" -#~ "\n" -#~ "Druk ten slotte op de resetknop " -#~ "van het apparaat en wacht een paar" -#~ " seconden voordat u het opnieuw " -#~ "probeert." - -#~ msgid "Web" -#~ msgstr "Web" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Bouw eenvoudige websites met het webframework \"Flask\"." - -#~ msgid "Run the web server." -#~ msgstr "Start de webserver." - -#~ msgid "Open your website in a browser." -#~ msgstr "Open uw website in een browser." - -#~ msgid "Templates" -#~ msgstr "Sjablonen" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Laad HTML-sjablonen die door uw website worden gebruikt." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Laad CSS-bestanden die door uw website worden gebruikt." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Open de map met afbeeldingen die door uw website worden gebruikt." - -#~ msgid "Stop the web server." -#~ msgstr "Stop de webserver." - -#~ msgid "This is not a Python file!" -#~ msgstr "Dit is geen Python-bestand!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "Mu kan alleen een Python-bestand " -#~ "serveren. Zorg ervoor dat het huidige" -#~ " tabblad in Mu het tabblad is " -#~ "voor uw webtoepassing en probeer het " -#~ "opnieuw." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Kan sjabloonmap niet vinden!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Om uw webtoepassing te bedienen, moet" -#~ " er een map 'templates' aanwezig zijn" -#~ " op dezelfde plaats als de Python-" -#~ "code van uw webtoepassing. Verhelp dit" -#~ " en probeer het opnieuw. (Hint: Mu" -#~ " verwachtte dat de directory `templates`" -#~ " hier zou zijn: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Kan website niet openen - Server draait niet." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "U moet de lokale webserver hebben " -#~ "draaien om uw website in een " -#~ "browser te kunnen bekijken. Klik op " -#~ "de knop 'Uitvoeren' om de server " -#~ "te starten en probeer het opnieuw." - diff --git a/mu/locale/pl/LC_MESSAGES/mu.po b/mu/locale/pl/LC_MESSAGES/mu.po index 92164b633..05c32e4b1 100644 --- a/mu/locale/pl/LC_MESSAGES/mu.po +++ b/mu/locale/pl/LC_MESSAGES/mu.po @@ -1597,522 +1597,3 @@ msgstr "Pokaż muzykę używaną przez Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Zatrzymaj swoją grę Pygame Zero." - -#~ msgid "Logging to {}" -#~ msgstr "Logowanie do {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "Debugger wymaga nazwę pliku skryptu Pythona by działać" - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Pliki na Twoim micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Twój skrypt jest za długi!" - -#~ msgid " Runtime: {}" -#~ msgstr " Wykonanie: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "" -#~ "Nadpisz wbudowany program MicroPythona " -#~ "następującym plikiem hex (pusty oznacza " -#~ "użycie domyślnego):" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Nadpisz wbudowany program MicroPythona " -#~ "następującym plikiem hex (pusty oznacza " -#~ "użycie domyślnego):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Ustawienia BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "System plików na micro:bitcie" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Plik już istnieje; Nadpisać go?" - -#~ msgid "File already exists" -#~ msgstr "Plik już istnieje" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Kopiowanie '{}' na micro:bita." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' skopiowane z sukcesem na micro:bita." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Usuń (nie może zostać cofnięte)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Usuwanie '{}' z micro:bita." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' usunięto z sukcesem z micro:bita." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Pobieranie '{}' z micro:bita. Kopiowanie do '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Skopiowałem z powodzeniem '{}' z micro:bita na Twój komputer." - -#~ msgid "Open in Mu" -#~ msgstr "Otwórz w Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Otwieranie '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Pliki na Twoim komputerze:" - -#~ msgid "Files on your computer:" -#~ msgstr "Pliki na Twoim komputerze:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Był problem z pobraniem listy plików " -#~ "na micro:bitcie. Proszę sprawdź logi Mu" -#~ " dla informacji technicznych. Alternatywnie, " -#~ "spróbuj odłączyc/podłączyć swojego micro:bita " -#~ "i/lub zrestartować Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Był problem z usunięciem '{}' z " -#~ "micro:bita. Proszę sprawdź logi Mu w " -#~ "celu uzyskania więcej informacji." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Był problem z usunięciem '{}' z " -#~ "micro:bita. Proszę sprawdź logi Mu w " -#~ "celu uzyskania więcej informacji." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Był problem z usunięciem '{}' z " -#~ "micro:bita. Proszę sprawdź logi Mu w " -#~ "celu uzyskania więcej informacji." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Nie mogłem znaleźć wersji wykonywalnej MicroPythona" - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Wersja wykonywalna micro:bit, którą podałeś" -#~ " ('{}') nie istnieje. Proszę spróbuj " -#~ "ponownie." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Pliki" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Uzyskaj dostęp do systemu plików na micro:bit." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Używaj REPL do kodowania na żywo na micro:bit." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL i system plików nie mogą działać w tym samym czasie." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL i system plików oba używają " -#~ "tego samego połączenia szeregowego USB. " -#~ "Tylko jeden może być aktywny w " -#~ "dowolnym momencie. Wyłącz system plików " -#~ "i próbuj ponownie." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Plotter i system plików nie mogą być używane w tym samym czasie." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Plotter i system plików oba używają " -#~ "tego samego połączenia szeregowego USB. " -#~ "Tylko jeden może być aktywny w " -#~ "dowolnym momencie. Wyłącz system plików " -#~ "i próbuj ponownie." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "System plików nie może działać w tym samym czasie co REPL lub plotter." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "System plików i REPL i plotter " -#~ "używają tego samego połączenia szeregowego " -#~ "USB. Wyłącz REPL i plotter i " -#~ "próbuj ponownie." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Nie mogę znaleźć podłączonego urządzenia." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Proszę upewnij się, że urządzenie jest podłączone do komputera.\n" -#~ "\n" -#~ "Urządzenie musi zawierać sflaszowany " -#~ "Micropython na nim zanim system plików" -#~ " będzie działać.\n" -#~ "\n" -#~ "Na końcu naciśnij przycisk reset " -#~ "urządzenia i poczekaj kilka sekund przed" -#~ " ponowną próbą." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Pisz w MicroPython dla BBC micro:bita." - -#~ msgid "Flash" -#~ msgstr "Fleszuj" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Fleszuj swój kod na micro:bita." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Uzyskaj dostęp do systemu plików na micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Używaj REPL do kodowania na żywo na micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Twój skrypt jest za długi i pomniejszacz nie jest dostępny" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Twój skrypt jest za długi i pomniejszacz nie jest dostępny" - -#~ msgid "Problem minifying script" -#~ msgstr "Problem ze skryptem" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Nasz minifier (co to jest?) próbował, ale Twój skrypt jest zbyt długi!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Nie mogę fleszować \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Nie mogę znaleźć podłączonego BBC micro:bita." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Proszę upewnij się, że dajesz " -#~ "wystarczająco dużo czasu dla BBC " -#~ "micro:bit, że by został podłączony i " -#~ "skonfigurowany poprawnie przez Twój komputer." -#~ " To może zająć kilka sekund. " -#~ "Alternatywnie, próbuj odłączyć i podłączyć " -#~ "ponownie urządzenie lub zapisać swoją " -#~ "pracę a następnie zrestartuj Mu, jeśli" -#~ " urządzenie pozostaje niewykryte." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Niewspierany BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Twoje urządzenie jest nowsze niż ta " -#~ "wersja Mu. Proszę zaktualizuj Mu do " -#~ "najnowszej wersji by wspierać to " -#~ "urządzenie.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Fleszowanie \"{}\" na micro:bita." - -#~ msgid "Runtime" -#~ msgstr "nienazwany" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Skopiowana kod na micro:bita." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Wystąpił problem z fleszowaniem micro:bita." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Proszę nie odłączaj urządzenia dopóki " -#~ "fleszowanie nie zostało ukończone." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Używaj CircuitPython na linii płytek Adafruit" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Nie mogę znaleźć podłączonego urządzenia." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Pliki pythonowe dla urządzeń Adafruit " -#~ "CircuitPython są przechowywane na urządzeniu." -#~ " W związku z tym, by edytować " -#~ "te pliki potrzebujesz podłączonego urządzenia." -#~ " Dopóki go nie podłączysz, Mu będzie" -#~ " używał katalogu znalezionego tutaj:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...do przechowywania Twojego kodu." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Pokaż pomoc na temat Mu w przeglądarce." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/pt_BR/LC_MESSAGES/mu.po b/mu/locale/pt_BR/LC_MESSAGES/mu.po index 4fdca582b..ae23a012f 100644 --- a/mu/locale/pt_BR/LC_MESSAGES/mu.po +++ b/mu/locale/pt_BR/LC_MESSAGES/mu.po @@ -1632,548 +1632,3 @@ msgstr "Mostra as músicas utilizadas pelo Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Pára o seu jogo Pygame Zero." - -#~ msgid "Logging to {}" -#~ msgstr "Log em {}." - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "O depurador requer o nome de um script Python para executar." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Arquivos no micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "O seu script é muito grande!" - -# No obvious translation for runtime. Went technical, but quoted. -#~ msgid " Runtime: {}" -#~ msgstr " \"Runtime\": {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Minificar o código Python antes de enviar?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Substituir o MicroPython embutido com o" -#~ " seguinte arquivo 'hex' (se vazio, " -#~ "não haverá substituição)" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Como transferir o MicroPython para o seu dispositivo" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. Determine o tipo de dispositivo" -#~ " (ESP8266 ou ESP32)
 2. Baixe " -#~ "o firmware do https://micropython.org/download
 3." -#~ " Conecte seu dispositivo
 4. Carregue" -#~ " o arquivo .bin abaixo usando o " -#~ "botão \"Procurar\"
 5. Pressione \"Apagar" -#~ " e escrever firmware\"" - -#~ msgid "Browse" -#~ msgstr "Procurar" - -#~ msgid "Erase && write firmware" -#~ msgstr "Apagar && escrever firmware" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Definições do BBC micro:bit" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Transferidor de Firmware ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Sistema de arquivos em " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "O arquivo já existe; deseja substituí-lo?" - -#~ msgid "File already exists" -#~ msgstr "O arquivo já existe" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Copiando '{}' para o dispositivo." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' copiado com sucesso para o dispositivo." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Excluir (não pode ser desfeito)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Excluindo '{}' do dispositivo." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' excluído com sucesso do dispositivo." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Transferindo '{}' do dispositivo. Copiando para '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "" -#~ "A cópia de '{}' do dispositivo " -#~ "para o computador foi concluída com " -#~ "sucesso." - -#~ msgid "Open in Mu" -#~ msgstr "Abrir no Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Escrever para main.py no dispositivo" - -#~ msgid "Opening '{}'" -#~ msgstr "Abrindo '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Arquivos no dispositivo:" - -#~ msgid "Files on your computer:" -#~ msgstr "Arquivos no computador:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Houve uma falha ao obter a lista" -#~ " de arquivos no dispositivo. Verifique " -#~ "o log do Mu para obter detalhes" -#~ " técnicos. Alternativamente, tente desconectar" -#~ " e reconectar o teu dispositivo ou" -#~ " tente reiniciar o Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Houve uma falha ao copiar o " -#~ "arquivo '{}' para o dispositivo. " -#~ "Verifique os logs do Mu para mais" -#~ " informação." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Houve uma falha ao excluir '{}' do" -#~ " dispositivo. Verifique os logs do Mu" -#~ " para mais informação." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Houve uma falha ao transferir '{}' " -#~ "do dispositivo. Verifique os logs do " -#~ "Mu para mais informação." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "O \"runtime\" MicroPython não foi encontrado." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "O \"runtime\" micro:bit que você indicou" -#~ " ('{}') não existe. Tente novamente, " -#~ "por favor." - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Escreva MicroPython em placas ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Executa seu código diretamente em {board_name} por meio de REPL." - -#~ msgid "Files" -#~ msgstr "Arquivos" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Acessa o sistema de arquivos em {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Usa o REPL para programar diretamente em {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "O REPL e os arquivos não podem ser utilizados ao mesmo tempo." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "O REPL e os arquivos utilizam a" -#~ " mesma conexão USB. Só um deles " -#~ "pode estar ativo de cada vez. " -#~ "Desative os arquivos e tenta novamente." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "" -#~ "O gráfico e o sistema de arquivos" -#~ " não podem ser utilizados ao mesmo" -#~ " tempo." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "O gráfico e sistema de arquivos " -#~ "utilizam a mesma conexão USB. Só " -#~ "um deles pode estar ativo de cada" -#~ " vez. Desative o sistema de arquivos" -#~ " e tente novamente." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Não é possível executar nada sem nenhuma aba ativa do editor." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "A execução transfere o conteúdo da " -#~ "aba atual para o dispositivo. Parece " -#~ "que você não tem nenhuma aba " -#~ "aberta." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "Sistema de arquivos não pode ser " -#~ "utilizado ao mesmo tempo com o " -#~ "REPL ou com o gráfico." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "O sistema de arquivos, REPL e " -#~ "gráfico utilizam a mesma conexão USB." -#~ " Só um deles pode estar ativo " -#~ "de cada vez. Desativa o REPL e " -#~ "o gráfico e tenta novamente." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Não foi possível encontrar {board_name} conectado" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Certifique-se que o dispositivo está conectado ao computador.\n" -#~ "\n" -#~ "O dispositivo tem que ter o " -#~ "MicroPython previamente transferido antes dos" -#~ " arquivos poderem funcionar.\n" -#~ "\n" -#~ "Por último, pressiona o botão RESET " -#~ "no dispositivo, aguarde alguns segundos " -#~ "e tenta novamente." - -#~ msgid "{board_name} board" -#~ msgstr "placa {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Escreva MicroPython diretamente em dispositivos Lego Spike." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Escreva MicroPython para o BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Transferir" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Transfere o seu código para o micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Acessa o sistema de arquivos no micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Usa o REPL para programar diretamente no micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "O seu script é muito grande e a minificação de código está desabilitada" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "O seu script é muito grande e o minificador não está disponível" - -#~ msgid "Problem minifying script" -#~ msgstr "Problema ao minificar o script" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "O minificador tentou, mas o seu script é muito grande!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Não foi possível transferir \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Não foi possível encontrar um micro:bit conectado." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Por favor assegure que você dê " -#~ "tempo suficiente ao computador para " -#~ "detectar e identificar o micro:bit. Isto" -#~ " pode levar vários segundos. " -#~ "Alternativamente, tente desconectar e " -#~ "reconectar o dispositivo ou salve o " -#~ "seu trabalho e reinicie o Mu." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" -#~ "Não foi possível salvar um arquivo " -#~ "hex personalizado no diretório local." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "" -#~ "Quando um arquivo hex personalizado é" -#~ " configurado nas configurações, um " -#~ "diretório local não pode ser usado " -#~ "para salvar o arquivo hex final." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" -#~ "Não é possível usar um arquivo hex" -#~ " personalizado sem uma porta micro:bit." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Um não conseguiu detectar a porta " -#~ "serial micro:bit. Normalmente isso não é" -#~ " um problema, pois Um pode injetar" -#~ " o código Python no hex para " -#~ "transferir. Porém, isso não pode ser " -#~ "feito com um arquivo hex personalizado." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Este micro:bit não é suportado." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "O seu dispositivo é mais recente " -#~ "que esta versão do Mu. Por favor," -#~ " atualize o Mu para a última " -#~ "versão para obter suporte a este " -#~ "dispositivo.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Transferindo o micro:bit" - -#~ msgid "Runtime" -#~ msgstr "Tempo de execução" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Código copiado para o micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Houve uma falha na transferência para o micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Não desligue o dispositivo até que " -#~ "a transferência seja concluída. Verifique " -#~ "o log para mais informação." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Escreva MicroPython diretamente em um Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Use MicroPython na linha de placas Pyboard" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Não foi possível encontrar um dispositivo PyBoard conectado." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Os arquivos Python para dispositivos " -#~ "PyBoard MicroPython são armazenados no " -#~ "dispositivo. Assim sendo, para os editar" -#~ " esses arquivos você precisará ter o" -#~ " dispositivo conectado. Até você conectar" -#~ " um dispositivo, Mu vai usar o " -#~ "diretório encontrado aqui:\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "...para armazenar seu código." - -#~ msgid "Web" -#~ msgstr "Web" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Construa sites simples com o framework web \"Flask\"." - -#~ msgid "Run the web server." -#~ msgstr "Executa o servidor web." - -#~ msgid "Open your website in a browser." -#~ msgstr "Abre seu site em um navegador." - -#~ msgid "Templates" -#~ msgstr "Modelos" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Carrega modelos HTML usados por seu site." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Carrega arquivos CSS usados por seu site." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Abre o diretório contendo imagens usadas por seu site." - -#~ msgid "Stop the web server." -#~ msgstr "Para o servidor web." - -#~ msgid "This is not a Python file!" -#~ msgstr "Isso não é um arquivo Python!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "Mu só consegue servir um arquivo " -#~ "Python. Certifique-se que a aba " -#~ "atual no Mu é aquela para sua " -#~ "aplicação web e tente novamente." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Não foi possível encontrar um diretório de modelos!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Para servir as aplicação web, é " -#~ "necessário haver um diretório de " -#~ "\"templates\" no mesmo lugar que o " -#~ "código Python da sua aplicação web. " -#~ "Corrija isso e tente novamente. (Dica:" -#~ " Mu esperava que o diretório " -#~ "`templates` estivesse aqui: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Não foi possível abrir o site - Servidor não está em execução." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "Você deve ter o servidor web local" -#~ " em execução para visualizar seu site" -#~ " em um navegador. Clique no botão " -#~ "\"Executar\" para iniciar o servidor e" -#~ " tente novamente." - diff --git a/mu/locale/pt_PT/LC_MESSAGES/mu.po b/mu/locale/pt_PT/LC_MESSAGES/mu.po index 17b8dc78a..87f4dfeff 100644 --- a/mu/locale/pt_PT/LC_MESSAGES/mu.po +++ b/mu/locale/pt_PT/LC_MESSAGES/mu.po @@ -1619,514 +1619,3 @@ msgstr "Mostra a música utilizada pelo Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Pára o teu jogo Pygame Zero." - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Compactar o código Python antes de enviar?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Substituir o MicroPython pré-definido com " -#~ "o seguinte ficheiro 'hex' (sem efeito" -#~ " se ficar em branco):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Carregar o MicroPython no teu dispositivo" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. Verifica que tipo de " -#~ "dispositivo tens (ESP8266 ou ESP32)
 2. Obtém o firmware a partir " -#~ "de https://micropython.org/download
 3." -#~ " Liga o dispositivo
 4. Carrega o" -#~ " ficheiro .bin, escolhendo-o depois de " -#~ "carregares no botão 'Pesquisar'
 5. " -#~ "Carrega no botão 'Apaga e escreve " -#~ "novo firmware'" - -#~ msgid "Browse" -#~ msgstr "Navega" - -#~ msgid "Erase && write firmware" -#~ msgstr "Apaga e escreve novo firmware" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Definições do micro:bit" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Firmware ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Ficheiros no " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "O ficheiro já existe; substituí-lo?" - -#~ msgid "File already exists" -#~ msgstr "O ficheiro já existe" - -#~ msgid "Copying '{}' to device." -#~ msgstr "A copiar '{}' para o dispositivo." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' copiado com sucesso para o dispositivo." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Apagar (não podes desfazer)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "A apagar '{}' do dispositivo." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' apagado com sucesso do dispositivo." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "A transferir '{}' do dispositivo, com cópia para '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Cópia de '{}' do dispositivo para o computador concluída." - -#~ msgid "Open in Mu" -#~ msgstr "Abrir no Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Escreve no ficheiro 'main.py' no dispositivo" - -#~ msgid "Opening '{}'" -#~ msgstr "A abrir '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Ficheiros no teu dispositivo:" - -#~ msgid "Files on your computer:" -#~ msgstr "Ficheiros no teu computador:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Falha ao obter a lista de " -#~ "ficheiros no dispositivo. Verifica o log" -#~ " do Mu para obteres detalhes " -#~ "técnicos. Em alternativa, tenta desligar " -#~ "e voltar ligar o teu dispositivo " -#~ "ou reinicia o Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Houve uma falha a copiar o " -#~ "ficheiro '{}' para o dispositivo. " -#~ "Verifica o log do Mu para mais " -#~ "informação." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Houve uma falha a apagar o " -#~ "ficheiro '{}' no dispositivo. Verifica o" -#~ " log do Mu para mais informação." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Houve uma falha a obter o ficheiro" -#~ " '{}' do dispositivo. Verifica o log" -#~ " do Mu para mais informação." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "O 'runtime' MicroPython não foi encontrado." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "O 'runtime' micro:bit que indicaste ({}) não existe. Tenta novamente." - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "MicroPython ESP" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Escreve MicroPython em dispositivos ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Corre o teu programa diretamente no {board_name} através do REPL." - -#~ msgid "Files" -#~ msgstr "Ficheiros" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Acede aos ficheiros no {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Usa o REPL para programar directamente no {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "O REPL e os ficheiros não podem ser utilizados em simultâneo." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "O REPL e os ficheiros utilizam a" -#~ " mesma ligação USB. Só um deles " -#~ "pode estar ativo. Fecha o painél " -#~ "dos ficheiros e tenta novamente." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "O gráfico e os ficheiros não podem ser utilizados em simultâneo." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "O gráfico e os ficheiros utilizam " -#~ "a mesma ligação USB. Só um deles" -#~ " pode estar ativo. Fecha o painél " -#~ "dos ficheiros e tenta novamente." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Não é possível executar um programa sem um separador ativo." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Para copiares o código do separador " -#~ "atual para o dispositivo, verifica que" -#~ " tens pelo um separador aberto." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "Os ficheiros não podem ser utilizados" -#~ " em simultâneo com o REPL ou " -#~ "com o gráfico." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Os ficheiros, REPL e gráfico utilizam" -#~ " a mesma ligação USB. Só um " -#~ "deles pode estar ativo. Fecha o " -#~ "painél do REPL e do gráfico, e " -#~ "tenta novamente." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Não encontro um dispositivo {board_name} ligado." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Garante que o dispositivo está ligado ao computador.\n" -#~ "\n" -#~ "O dispositivo tem que ter o " -#~ "MicroPython previamente carregado antes dos" -#~ " programas poderem funcionar.\n" -#~ "\n" -#~ "Por último, pressiona o botão RESET " -#~ "no dispositivo, aguarda uns segundos e" -#~ " tenta novamente." - -#~ msgid "{board_name} board" -#~ msgstr "Dispositivo {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "MicroPython LEGO" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Escreve MicroPython em dispostivos LEGO Spike." - -#~ msgid "BBC micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Escrever MicroPython para um micro:bit." - -#~ msgid "Flash" -#~ msgstr "Transferir" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Transfere o teu programa para o micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Acede aos ficheiros no micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Usa o REPL para programar directamente no micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "O teu programa é muito grande e o compactador não está ativado." - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "O teu programa é muito grande e o compactador não está disponível." - -#~ msgid "Problem minifying script" -#~ msgstr "Problema na compactação do teu programa." - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "O compactador não funcionou porque o teu programa é muito grande!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Não foi possível transferir \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Não foi encontrado um micro:bit ligado." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Garante que dás tempo suficiente ao " -#~ "computador para detetar e identificar o" -#~ " micro:bit. Por vezes pode levar " -#~ "vários segundos. Em alternativa, tenta " -#~ "desligar e voltar a ligar o " -#~ "dispositivo, ou guarda o teu trabalho" -#~ " e reinicia o Mu." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "Não é possível gravar um ficheiro hex numa pasta local." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "" -#~ "Quando um arquivo hex personalizado é" -#~ " configurado nas configurações, um " -#~ "diretório local não pode ser usado " -#~ "para salvar o arquivo hex final." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Este micro:bit não é suportado." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "O teu dispositivo não funciona com " -#~ "esta versão do Mu. Por favor, " -#~ "atualiza o Mu.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "A carregar o programa no micro:bit." - -#~ msgid "Runtime" -#~ msgstr " 'Runtime': {}" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Programa copiado para o micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Houve uma falha no carregamento para o micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Por favor não desligues o dispositivo" -#~ " até que o carregamento esteja " -#~ "terminado. Verifica o log para mais " -#~ "informação." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Escreve MicroPython num Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "MicroPython pyboard" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Escreve MicroPython em dispositivos pyboard." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Não encontro um dispositivo pyboard ligado." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Os ficheiros Python para dispositivos " -#~ "pyboard são armazenados no próprio " -#~ "dispositivo. Assim sendo, para os " -#~ "alterar terás que o ligar. Entretanto," -#~ " o Mu utiliza esta pasta para " -#~ "guardar os teus programas:\n" -#~ "\n" -#~ "{}" - -#~ msgid "Web" -#~ msgstr "Web" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Cria websites simples com componentes 'Flask'." - -#~ msgid "Run the web server." -#~ msgstr "Corre o servidor web." - -#~ msgid "Open your website in a browser." -#~ msgstr "Abre o teu website no navegador ('browser')." - -#~ msgid "Templates" -#~ msgstr "Modelos" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Carrega modelos HTML utilizados pelo teu website." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Carrega ficheiros CSS utilizados pelo teu website." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Abre a pasta que contem as imagens utilizadas pelo teu website." - -#~ msgid "Stop the web server." -#~ msgstr "Pára o servidor web." - -#~ msgid "This is not a Python file!" -#~ msgstr "Isto não é um ficheiro Python!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "O Mu só é capaz de trabalhar " -#~ "com um ficheiro Python. Verifica se " -#~ "o separador atual do Mu contém a" -#~ " tua aplicação web e tenta novamente." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Não é possível encontrar a pasta dos modelos!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Para que a tua aplicação web possa" -#~ " funciona, é necessário que exista " -#~ "uma subpasta 'templates' na pasta onde" -#~ " guardas o código Python da tua " -#~ "aplicação. Corrige esta situação e tenta" -#~ " novamente. (Dica: o Mu estava à " -#~ "espera de encontrar a pasta 'templates'" -#~ " aqui: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Não foi possível abrir o website - o servidor não está a correr." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "Tens de ter um servidor local a" -#~ " correr para que consigas ver o " -#~ "teu website num navegador ('broswer'). " -#~ "Carrega no botão 'Correr' para iniciar" -#~ " o servidor e tenta novamente." - diff --git a/mu/locale/ru_RU/LC_MESSAGES/mu.po b/mu/locale/ru_RU/LC_MESSAGES/mu.po index 9824904dd..71eab8816 100644 --- a/mu/locale/ru_RU/LC_MESSAGES/mu.po +++ b/mu/locale/ru_RU/LC_MESSAGES/mu.po @@ -1618,521 +1618,3 @@ msgstr "Показать музыку, используемую Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Остановите игру Pygame Zero." - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Минимизировать код Python перед прошивкой?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Замените встроенную среду выполнения " -#~ "MicroPython следующим шестнадцатеричным файлом " -#~ "(пустой означает использование значения по " -#~ "умолчанию):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Как записать файл прошивки MicroPython на ваше устройство" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ "  1. Определите тип устройства " -#~ "(ESP8266 или ESP32)
2. " -#~ "Загрузите прошивку со страницы https://micropython.org/download " -#~ "
  3. Подключите " -#~ "устройство
  4. Используя " -#~ "кнопку \"Обзор\", выберите файл прошивки " -#~ "(.bin)
  5. Нажмите \"Стереть" -#~ " и записать прошивку\"." - -#~ msgid "Browse" -#~ msgstr "Обзор" - -#~ msgid "Erase && write firmware" -#~ msgstr "Очистить устройство и записать прошивку" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit Настройки" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Загрузчик прошивки ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Файловая система на " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Файл уже существует; перезаписать?" - -#~ msgid "File already exists" -#~ msgstr "Файл уже существует" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Копирование '{}' на устройство." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' успешно скопировано на устройство." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Удалить (это действие невозможно отменить)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Удаление '{}' с устройства." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' успешно удалено с устройства." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Получение '{}' с устройства. Копирование в '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' Успешно скопирован с устройства на ваш компьютер." - -#~ msgid "Open in Mu" -#~ msgstr "Открыть в Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Запись в main.py на устройстве" - -#~ msgid "Opening '{}'" -#~ msgstr "Открытие '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Файлы на вашем устройстве:" - -#~ msgid "Files on your computer:" -#~ msgstr "Файлы на вашем компьютере:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Не удалось получить список файлов на " -#~ "устройстве. Пожалуйста, проверьте логи Mu " -#~ "для получения детальной информации. Или " -#~ "попробуйте отключить / подключить ваше " -#~ "устройство и / или перезапустить Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "При копировании файла '{}' на устройство" -#~ " возникла проблема. Пожалуйста, проверьте " -#~ "логи Mu для получения дополнительной " -#~ "информации." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "При удалении \"{}\" с устройства " -#~ "возникла проблема. Пожалуйста, проверьте логи" -#~ " Mu для получения дополнительной " -#~ "информации." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Не удалось получить \"{}\" с устройства." -#~ " Пожалуйста, проверьте логи Mu для " -#~ "получения дополнительной информации." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Не удалось найти среду выполнения MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Указанная вами среда выполнения micro:bit " -#~ "('{}') не существует. Пожалуйста, попробуйте" -#~ " еще раз." - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Запускайте MicroPython на платах ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Запустите свой код прямо на {board_name} через REPL." - -#~ msgid "Files" -#~ msgstr "Файлы" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Доступ к файловой системе на {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Используйте REPL для немедленного исполнения кода на {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL и файловая система не могут работать одновременно." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL и файловая система используют одно" -#~ " и то же последовательное соединение " -#~ "USB. Только одно из них может быть" -#~ " активно в одно и то же время." -#~ " Отключитесь от файловой системы и " -#~ "попробуйте еще раз." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Плоттер и файловая система не могут работать одновременно." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Плоттер и файловая система используют " -#~ "одно и то же последовательное соединение" -#~ " USB. Только одно из них может " -#~ "быть активно в одно и то же " -#~ "время. Отключитесь от файловой системы и" -#~ " попробуйте еще раз." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Невозможно запустить что-либо без активных вкладок редактора." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Запуск передает содержимое текущей вкладки " -#~ "(код) на устройство. Похоже, у вас " -#~ "нет открытых вкладок." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Файловая система не может работать одновременно с REPL или плоттером." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Файловая система, REPL и плоттер " -#~ "используют одно и то же последовательное" -#~ " соединение USB. Выключите REPL и " -#~ "плоттер и попробуйте снова." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Не удалось найти подключенную {board_name}" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Убедитесь, что устройство подключено к этому компьютеру.\n" -#~ "\n" -#~ "Чтобы файловая система заработала, на " -#~ "устройстве должен быть установлен MicroPython." -#~ "\n" -#~ "\n" -#~ "Наконец, нажмите кнопку сброса устройства " -#~ "и подождите несколько секунд, прежде чем" -#~ " повторить попытку." - -#~ msgid "{board_name} board" -#~ msgstr "Плата {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "Лего MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Запишите MicroPython прямо на устройство Lego Spike." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Запускайте MicroPython на BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Загрузить" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Загрузить ваш код на плату micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Доступ к файловой системе на micro: bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Используйте REPL для немедленного выполнения кода на micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ваш скрипт слишком длинный, и минификация кода отключена" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ваш скрипт слишком длинный, а минификатор недоступен" - -#~ msgid "Problem minifying script" -#~ msgstr "Проблема с минификацией скрипта" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Наш минификатор пытался уменьшить код, но ваш скрипт слишком длинный!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Невозможно записать файл \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Не удалось найти прикрепленную плату BBC micro: bit." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Пожалуйста, убедитесь, что BBC micro:bit " -#~ "подключён к компьютеру достаточно времени, " -#~ "чтобы система могла его настроить. Это" -#~ " может занять несколько секунд. В " -#~ "качестве альтернативы попробуйте удалить и " -#~ "снова подключить устройство или сохранить " -#~ "свою работу и перезапустить Mu, если " -#~ "устройство не обнаружено." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" -#~ "Невозможно сохранить пользовательский " -#~ "шестнадцатеричный файл в локальном каталоге." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" -#~ "Когда пользовательский шестнадцатеричный файл " -#~ "изменён в настройках, локальный каталог " -#~ "не может использоваться для сохранения " -#~ "окончательного шестнадцатеричного файла." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" -#~ "Невозможно использовать собственный " -#~ "шестнадцатеричный файл без порта micro:bit." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Mu не смог обнаружить последовательный " -#~ "порт micro:bit. Обычно это нормально, " -#~ "поскольку Mu может вставить код Python" -#~ " в шестнадцатеричный код для прошивки. " -#~ "Однако это невозможно сделать с помощью" -#~ " пользовательского шестнадцатеричного файла." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Неподдерживаемый BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Ваше устройство новее, чем эта версия" -#~ " Mu. Пожалуйста, обновите Mu до " -#~ "последней версии для поддержки этого " -#~ "устройства.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Прошивка micro:bit" - -#~ msgid "Runtime" -#~ msgstr "Среда выполнения" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Код скопирован на micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Не удалось прошить micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Не отключайте устройство, пока не " -#~ "завершится перепрошивка. Пожалуйста, проверьте " -#~ "логи для получения дополнительной информации." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Запускайте MicroPython прямо на Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Используйте MicroPython на линейке плат Pyboard" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Не удалось найти подключенное устройство PyBoard." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Файлы Python для плат PyBoard " -#~ "MicroPython хранятся на устройстве. " -#~ "Следовательно, для редактирования этих файлов" -#~ " вам необходимо подключить устройство. Пока" -#~ " вы не подключите плату, Mu будет " -#~ "использовать каталог, найденный здесь:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "... для хранения вашего кода." - -#~ msgid "Web" -#~ msgstr "Веб" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Создавайте простые веб-сайты с помощью веб-фреймворка Flask." - -#~ msgid "Run the web server." -#~ msgstr "Запустите веб-сервер." - -#~ msgid "Open your website in a browser." -#~ msgstr "Откройте свой сайт в браузере." - -#~ msgid "Templates" -#~ msgstr "Шаблоны" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Загрузите HTML-шаблоны, используемые вашим сайтом." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Загрузите файлы CSS, используемые вашим сайтом." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Откройте каталог, содержащий изображения, используемые вашим сайтом." - -#~ msgid "Stop the web server." -#~ msgstr "Остановить веб-сервер." - -#~ msgid "This is not a Python file!" -#~ msgstr "Это не файл Python!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "Mu может запускать только файлы Python." -#~ " Убедитесь, что текущая вкладка в Mu" -#~ " - это вкладка вашего веб-приложения, " -#~ "а затем повторите попытку." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Не удается найти каталог шаблонов!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Для обслуживания вашего веб-приложения " -#~ "необходим каталог шаблонов в том же " -#~ "месте, что и код Python вашего " -#~ "веб-приложения. Исправьте это и попробуйте " -#~ "еще раз. (Подсказка: Mu ожидал, что " -#~ "здесь будет каталог `templates` :)" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Не удается открыть веб-сайт - сервер не работает." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "У вас должен быть запущен локальный " -#~ "веб-сервер, чтобы просматривать ваш веб-сайт" -#~ " в браузере. Нажмите кнопку «Выполнить»," -#~ " чтобы запустить сервер, а затем " -#~ "повторите попытку." - diff --git a/mu/locale/sk_SK/LC_MESSAGES/mu.po b/mu/locale/sk_SK/LC_MESSAGES/mu.po index 42f69381e..f3407d281 100644 --- a/mu/locale/sk_SK/LC_MESSAGES/mu.po +++ b/mu/locale/sk_SK/LC_MESSAGES/mu.po @@ -1600,545 +1600,3 @@ msgstr "Zobrazí hudbu používanú knižnicou Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Zastaví vašu Pygame Zero hru." - -#~ msgid "Use the REPL to live-code on the ESP8266/ESP32." -#~ msgstr "Použiť REPL na živé kódenie na doskách ESP8266/ESP32." - -#~ msgid "ESP board" -#~ msgstr "Doska ESP" - -#~ msgid "Your script is too long!" -#~ msgstr "Váš skript je príliš dlhý!" - -#~ msgid "" -#~ "Running in debug mode. Use the " -#~ "Stop, Continue, and Step toolbar buttons" -#~ " to debug the script" -#~ msgstr "" -#~ "Spustené v režime ladenia. Na ladenie" -#~ " skriptu použite tlačidlá Zastaviť, " -#~ "Pokračovať a Krokovať, ktoré nájdete na" -#~ " paneli nástrojov." - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Minifikovať Python kód pred jeho zapísaním?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Prepísať vstavaný MicroPython s nasledujúcim" -#~ " hex súborom (ak nič neuvediete, " -#~ "použije sa predvolené nastavenie):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Ako zapísať MicroPython do vášho zariadenia" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. Zistite typ zariadenia (ESP8266 " -#~ "alebo ESP32)
 2. Stiahnite si " -#~ "firmvér zo stránky https://micropython.org/download
 3." -#~ " Pripojte svoje zariadenie
 4. Pomocou" -#~ " tlačidla 'Prehliadať' načítajte .bin " -#~ "súbor
 5. Stlačte 'Vymazať a zapísať" -#~ " firmvér'" - -#~ msgid "Device:" -#~ msgstr "Zariadenie:" - -#~ msgid "Choose device type:" -#~ msgstr "Vyberte typ zariadenia:" - -#~ msgid "Firmware (.bin):" -#~ msgstr "Firmvér (.bin):" - -#~ msgid "Browse" -#~ msgstr "Prehliadať" - -#~ msgid "Erase && write firmware" -#~ msgstr "Vymazať a zapísať firmvér" - -#~ msgid "Select MicroPython firmware (.bin)" -#~ msgstr "Vyberte MicroPython firmvér (.bin)" - -#~ msgid "Firmware (*.bin)" -#~ msgstr "Firmvér (.bin)" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Nastavenie BBC micro:bit" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Zapisovač firmvéru do ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Súborový systém na " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Súbor už existuje; chcete ho prepísať?" - -#~ msgid "File already exists" -#~ msgstr "Súbor už existuje" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Na zariadenie sa kopíruje súbor '{}'." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "Na zariadenie bol úspešne prekopírovaný súbor '{}'." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Odstrániť (nedá sa vrátiť)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Zo zariadenia sa odstraňuje súbor '{}'." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "Zo zariadenia bol úspešne odstránený súbor '{}'." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Zo zariadenia sa získava '{}'. Kopíruje sa do '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Zo zariadenia bol úspešne prekopírovaný súbor '{}' na váš počítač." - -#~ msgid "Open in Mu" -#~ msgstr "Otvoriť v Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Zapísať do súboru main.py na zariadení" - -#~ msgid "Opening '{}'" -#~ msgstr "Otvára sa '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Súbory na vašom zariadení:" - -#~ msgid "Files on your computer:" -#~ msgstr "Súbory na vašom počítači:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Pri získavaní zoznamu súborov z vášho" -#~ " zariadenia sa vyskytol problém. Pre " -#~ "ďalšie technické informácie o tomto " -#~ "probléme prosím skontrolujte záznamník editora" -#~ " Mu . Prípadne môžete vyskúšať " -#~ "odpojiť/pripojiť vaše zariadenie a/alebo " -#~ "reštartovať Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Pri kopírovaní súboru '{}' na zariadenie" -#~ " nastala chyba. Pre viac informácií " -#~ "prosím skontrolujte záznamník editora Mu." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Pri mazaní súboru '{}' z vášho " -#~ "zariadenia nastala chyba. Pre viac " -#~ "informácií prosím skontrolujte záznamník " -#~ "editora Mu." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Pri získavaní súboru '{}' zo zariadenia" -#~ " nastala chyba. Pre viac informácií " -#~ "prosím skontrolujte záznamník editora Mu." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Nepodarilo sa nájsť runtime pre MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Runtime pre micro:bit, ktorý ste " -#~ "špecifikovali ('{}'), neexistuje. Skúste to" -#~ " prosím znova." - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Programujte v jazyku MicroPython na doskách ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Spustí váš kód priamo na doske {board_name} cez REPL." - -#~ msgid "Files" -#~ msgstr "Súbory" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Pristúpi k súborovému systému na zariadení {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Použite REPL na živé programovanie na doske {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL a súborový systém nemôžu pracovať súčasne." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL spolu so súborovým systémom " -#~ "používajú rovnaké sériové spojenie cez " -#~ "USB. Naraz môže byť aktívne len " -#~ "jedno. Vypnite súborový systém a skúste" -#~ " to znova." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Ploter a súborový systém nemôžu pracovať súčasne." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Ploter spolu so súborovým systémom " -#~ "používajú rovnaké sériové spojenie cez " -#~ "USB. Naraz môže byť aktívne len " -#~ "jedno. Vypnite súborový systém a skúste" -#~ " to znova." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Nič sa nedá spustiť bez aktívnych kariet editora." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Spúšťa sa prenos obsahu aktuálnej karty" -#~ " do zariadenia. Zdá sa, že nemáte " -#~ "otvorené žiadne karty." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Súborový systém nemôže pracovať súčasne s REPL alebo plottrom." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Súborový systém, REPL a ploter používajú" -#~ " rovnaké sériové pripojenie cez USB. " -#~ "Vypnite REPL a zapisovač a skúste " -#~ "to znova." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Nepodarilo sa nájsť pripojenú dosku {board_name}" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Uistite sa prosím, že je zariadenie pripojené k počítaču.\n" -#~ "\n" -#~ "Aby súborový systém fungoval, musí byť" -#~ " na zariadení zapísaný MicroPython.\n" -#~ "\n" -#~ "Nakoniec stlačte na zariadení tlačidlo " -#~ "reset a pred ďalším vyskúšaním počkajte" -#~ " niekoľko sekúnd." - -#~ msgid "{board_name} board" -#~ msgstr "doska {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Programujte zariadenia Lego Spike priamo v jazyku MicroPython." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Programujte BBC micro:bit v jazyku MicroPython." - -#~ msgid "Flash" -#~ msgstr "Zapísať" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Zapíše váš kód na micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Prístup k súborovému systému na zariadení micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Spustí živé programovanie (REPL) na zariadení micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Váš skript je príliš dlhý a minifikácia kódu je vypnutá" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Váš skript je príliš dlhý a minifikátor kódu nie je dostupný" - -#~ msgid "Problem minifying script" -#~ msgstr "Problém pri minifkovaní skriptu" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Náš minifikátor to skúsil, ale váš skript je príliš dlhý!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Nedá sa zapísať \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Nepodarilo sa nájsť pripojený BBC micro:bit." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Uistite sa prosím, že ste nechali " -#~ "dostatok času pre pripojenie a správne" -#~ " nastavenie zariadenia BBC micro:bit vašim" -#~ " počítačom. Môže to trvať niekoľko " -#~ "sekúnd. Prípadne sa pokúste zariadenie " -#~ "znova odpojiť a pripojiť alebo uložte" -#~ " svoju prácu a reštartujte Mu, ak " -#~ "sa zariadenie stále nenašlo." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "Nie je možné uložiť vlastný hex súbor do lokálneho priečinku." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "" -#~ "Ak je v nastaveniach nakonfigurovaný " -#~ "vlastný hex súbor, na uloženie " -#~ "výsledného hex súboru nie je možné " -#~ "použiť lokálny priečinok." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "Nie je možné použiť vlastný hex súbor bez portu na micro:bit." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Mu sa nepodarilo zistiť sériový port " -#~ "micro:bit-u. Za normálnych okolností je " -#~ "to v poriadku, pretože Mu môže " -#~ "vložiť kód v jazyku Python do hex" -#~ " súboru na zapísanie. To však nie " -#~ "je možné urobiť s vlastným hex " -#~ "súborom." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Nepodporovaný BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Vaše zariadenie je novšie ako táto " -#~ "verzia Mu. Aktualizujte prosím Mu na " -#~ "najnovšiu verziu, aby podporovala toto " -#~ "zariadenie.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Zapisuje sa na micro:bit" - -#~ msgid "Runtime" -#~ msgstr "" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Kód bol skopírovaný na micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Pri zapisovaní na micro:bit sa vyskytol problém." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Prosím neodpájajte zariadenie, pokiaľ nie " -#~ "je zapisovanie ukončené. Ďalšie informácie " -#~ "nájdete v záznamníku." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Programujte Raspberry Pi Pico priamo v jazyku MicroPython." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards." -#~ msgstr "Použite MicroPython na doskách radu Pyboard." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Nepodarilo sa nájsť pripojené PyBoard zariadenie." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Python súbory pre PyBoard zariadenia s" -#~ " jazykom MicroPython sú uložené priamo " -#~ "na zariadení. Ak ich chcete upravovať," -#~ " musíte mať toto zariadenie pripojené. " -#~ "Pokiaľ zariadenie nepripojíte, Mu bude " -#~ "na ukladanie vášho kódu používať " -#~ "priečinok, ktorý nájdete tu:\n" -#~ "\n" -#~ "{}" - -#~ msgid "Web" -#~ msgstr "Web" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Vytvárajte jednoduché webové stránky so softvérovým rámcom \"Flask\"." - -#~ msgid "Run the web server." -#~ msgstr "Spustí webový server." - -#~ msgid "Open your website in a browser." -#~ msgstr "Otvorí vašu webovú stránku v prehliadači." - -#~ msgid "Templates" -#~ msgstr "Šablóny" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Načíta HTML šablóny použité vo vašej webovej stránke." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Načíta CSS súbory použité vo vašej webovej stránke." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Otvorí priečinok obsahujúci obrázky použité vo vašej webovej stránke." - -#~ msgid "Stop the web server." -#~ msgstr "Zastaví webový server." - -#~ msgid "This is not a Python file!" -#~ msgstr "Toto nie je Python súbor!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "Nepodarilo sa nájsť priečinok so šablónami!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Webová stránka sa nedá otvoriť - server nie je spustený." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "Ak chcete zobraziť vašu webovú stránku" -#~ " v prehliadači, musíte mať spustený " -#~ "lokálny webový server. Spustite ho " -#~ "kliknutím na tlačidlo 'Spustiť' a potom" -#~ " to skúste to znova." - diff --git a/mu/locale/sv/LC_MESSAGES/mu.po b/mu/locale/sv/LC_MESSAGES/mu.po index 95c97aa75..292505962 100644 --- a/mu/locale/sv/LC_MESSAGES/mu.po +++ b/mu/locale/sv/LC_MESSAGES/mu.po @@ -1581,515 +1581,3 @@ msgstr "Visa musiken som används av Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Stoppa ditt Pygame Zero-spel." - -#~ msgid "Logging to {}" -#~ msgstr "Loggar till {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "Debuggern måste ha namn på ett Python-skript för att kunna köra." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Filer på din micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Ditt skript är för långt!" - -#~ msgid " Runtime: {}" -#~ msgstr " Exekveringsmiljö: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Minifiera Python-koden innan flashning?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Skriv öven den inbyggda exekveringsmiljön " -#~ "för MicroPython med den här hex-" -#~ "filen (tomt betyder använd den " -#~ "inbyggda):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Inställningar för BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Filsystemet på micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Filen finns redan; skriva över den?" - -#~ msgid "File already exists" -#~ msgstr "Filen finns redan" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Kopierar ‘{}’ till micro:biten." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "Lyckad kopiering av ‘{}’ till micro:biten." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Ta bort (kan inte ångras)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Tar bort '{}' från micro:biten." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' borttagen från micro:biten." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Hämtar ‘{}’ från micro:biten. Kopierar till ‘{}’." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Kopierat ‘{}’ från micro:biten till din dator." - -#~ msgid "Open in Mu" -#~ msgstr "Öppna i Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Öppnar ‘{}’" - -#~ msgid "Files on your device:" -#~ msgstr "Filer på din dator:" - -#~ msgid "Files on your computer:" -#~ msgstr "Filer på din dator:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Det var problem med att hämta " -#~ "fillistan på micro:biten. Titta i Mus" -#~ " loggar efter teknisk information. " -#~ "Alternativt, försök koppla loss och " -#~ "ansluta din micro:bit och/eller start om" -#~ " Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Det var problem med att kopiera " -#~ "filen ‘{}’ till micro:biten. Titta i " -#~ "Mus loggar efter mer information." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Det var problem med att ta bort" -#~ " ‘{}’ från micro:biten. Titta i Mus" -#~ " loggar efter mer information." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Det var problem med att hämta ‘{}’" -#~ " från micro:biten. Titta i Mus loggar" -#~ " efter mer information." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Kunde inte hitta någon exekveringsmiljö för MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "Exekveringsmiljön (‘{}’) du angav finns inte. Försök igen." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Filer" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Accessa filsystemet på micro:biten." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Använd REPL för att live-koda på micro:biten." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL och filsystem kan inte användas samtidigt." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL och filsystemet använder båda samma" -#~ " seriella USB-anslutning. Bara en kan" -#~ " vara aktiv åt gången. Stäng av " -#~ "filsystemet och försök igen." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Plottern och filsystem kan inte användas samtidigt." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Plottern och filsystemet använder båda " -#~ "samma seriella USB-anslutning. Bara en" -#~ " kan vara aktiv åt gången. Stäng " -#~ "av filsystemet och försök igen." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Filsystemet kan inte användas samtidigt som REPL eller plottern." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Filsystemet, REPL och plottern använder " -#~ "samma seriella USB-koppling. Stänga av" -#~ " REPL och plotter och försök igen." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Kunde inte hitta någon ansluten enhet." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Kontrollera att enheter är kopplad till den här datorn.\n" -#~ "\n" -#~ "Enheten måste ha MicroPython flashat " -#~ "till den innan filsystemet kan fungera." -#~ "\n" -#~ "\n" -#~ "Slutligen, tryck på enhetens reset-knapp" -#~ " och vänta ett par sekunder innan " -#~ "du försöker igen." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Skriv MicroPython för BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Flasha" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Flasha din kod till micro:biten." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Accessa filsystemet på micro:biten." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Använd REPL för att live-koda på micro:biten." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ditt skript är för långt och minifieraren är inte tillgänglig" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ditt skript är för långt och minifieraren är inte tillgänglig" - -#~ msgid "Problem minifying script" -#~ msgstr "Problem med skrytet" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Vår minifierare försökte, men ditt skript är för långt!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Kunde inte flasha “{}”" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Kunde inte hitta en ansluten BBC micro:bit." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Lämna tillräckligt med tid för att " -#~ "BBC micro:biten ska hinna anslutas och" -#~ " konfigureras av din datorn. Det kan" -#~ " ta flera sekunder. Alterntivt, försök " -#~ "koppla loss och anslut sedan enheten " -#~ "igen eller spara ditt arbete och " -#~ "start om Mu om enheten fortfarande " -#~ "inte hittas." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Osupportad BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Din enhet är nyare än den här " -#~ "versionen av Mu. Uppdatera Mu till " -#~ "den senaste version för att stödja " -#~ "enheten.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Flashar “{}” till micro:biten." - -#~ msgid "Runtime" -#~ msgstr "namnlös" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Kopierar koden till micro:biten." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Det var ett problem med att flasha micro:biten." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Koppla inte bort enheten innan " -#~ "flashingen har avslutat. Titta i loggar" -#~ " efter mer information." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Använd CircuitPython på utvecklingskort från Adafruit." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Kunde inte hitta någon ansluten enhet." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Python-filer för Adafruit CircuitPython-" -#~ "enheter lagras på enheten. Därför måste" -#~ " du ha enheten ansluten för att " -#~ "kunna ändra filerna. Tills dess att " -#~ "du ansluter en enhet, kommer Mu " -#~ "använda katalogen:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "…för att lagra din kod." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Visa hjälp om Mu in en webbläsare." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/uk_UA/LC_MESSAGES/mu.po b/mu/locale/uk_UA/LC_MESSAGES/mu.po index dff2dcb18..4a5dc46cc 100644 --- a/mu/locale/uk_UA/LC_MESSAGES/mu.po +++ b/mu/locale/uk_UA/LC_MESSAGES/mu.po @@ -1619,520 +1619,3 @@ msgstr "Показати музику, яку використовує Pygame Ze #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Зупинити гру Pygame Zero." - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Мінімізувати код Python перед записом у пам'ять?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Перевизначення вбудованого середовища виконання " -#~ "MicroPython за допомогою наступного " -#~ "шістнадцяткового файла (порожній означає " -#~ "використання типового):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Як записати файл прошивки MicroPython на ваш пристрій" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ "1. Визначте тип пристрою (ESP8266 або" -#~ " ESP32) 2
. Завантажте прошивку " -#~ "з https://micropython.org/download 3
. Підключіть пристрій" -#~ " 4.
Завантажте файл .bin нижче за " -#~ "допомогою кнопки \"Перегляд\" 5.
Натисніть " -#~ "\"Видалити та записати мікропрограмне " -#~ "забезпечення\"" - -#~ msgid "Browse" -#~ msgstr "Огляд" - -#~ msgid "Erase && write firmware" -#~ msgstr "Стирання і запис мікропрограмного забезпечення" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Налаштування BBC micro:bit" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Завантажувач прошивки ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Файлова система на " - -#~ msgid "Mu" -#~ msgstr "М'ю" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Файл вже існує. Перезаписати його?" - -#~ msgid "File already exists" -#~ msgstr "Файл вже існує" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Копіювання '{}' на пристрій." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' успішно скопійовано на пристрій." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Видалити (неможливо скасувати)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Видалення '{}' з пристрою." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' успішно видалено з пристрою." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Отримання '{}' з пристрою. Копіювання до '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Успішно скопійовано '{}' з пристрою на комп 'ютер." - -#~ msgid "Open in Mu" -#~ msgstr "Відкрити в М'ю" - -#~ msgid "Write to main.py on device" -#~ msgstr "Запис до main.py на пристрої" - -#~ msgid "Opening '{}'" -#~ msgstr "Відкривання '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Файли на вашому пристрої:" - -#~ msgid "Files on your computer:" -#~ msgstr "Файли на вашому комп’ютері:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Виникла проблема з отриманням списку " -#~ "файлів на пристрої. Будь ласка, " -#~ "перевірте журнали М'ю для отримання " -#~ "технічної інформації. Крім того, спробуйте " -#~ "вимкнути/підключити пристрій та/або перезапустити" -#~ " М'ю." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Виникла проблема з копіюванням файлу " -#~ "'{}' на пристрій. Будь ласка, перевірте" -#~ " журнали М'ю для отримання додаткової " -#~ "інформації." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Під час видалення \" '{}' з " -#~ "пристрою сталася помилка. Будь ласка, " -#~ "перевірте журнали М'ю для отримання " -#~ "додаткової інформації." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Виникла проблема з отриманням '{}' з" -#~ " пристрою. Будь ласка, перевірте журнали" -#~ " М'ю для отримання додаткової інформації." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Не вдалося знайти MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Код micro:bit, який ви вказали ('{}')," -#~ " не існує. Будь ласка спробуйте ще" -#~ " раз." - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Запускайте MicroPython на платах ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Запустіть свій код безпосередньо на {board_name} через REPL." - -#~ msgid "Files" -#~ msgstr "Файли" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Доступ до файлової системи на {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Використовуйте REPL для 'живого' коду на {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL та файлова система не можуть працювати одночасно." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL і файлова система використовують " -#~ "однакове послідовне з'єднання USB. Тільки " -#~ "один може бути активним у будь-який " -#~ "час. Вимкніть файлову систему та " -#~ "повторіть спробу." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Плотер і файлова система не можуть працювати одночасно." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Плотер і файлова система використовують " -#~ "однакове послідовне з'єднання USB. Тільки " -#~ "один може бути активним у будь-який " -#~ "час. Вимкніть файлову систему та " -#~ "повторіть спробу." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Нічого не можна запустити без активних вкладок редактора." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Виконання передає вміст поточної вкладки " -#~ "на пристрій. Схоже, у вас немає " -#~ "відкритих вкладок." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Файлова система не може працювати одночасно з REPL або плотером." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Файлова система та REPL та плотер " -#~ "використовують одне і те ж послідовне" -#~ " з'єднання USB. Вимкніть REPL та " -#~ "плотер та спробуйте ще раз." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Не вдалося знайти приєднаний пристрій {board_name}." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Переконайтеся, що пристрій підключено до цього комп’ютера.\n" -#~ "\n" -#~ "Перед тим, як файлова система запрацює," -#~ " на пристрої повинен бути прошитий " -#~ "MicroPython.\n" -#~ "\n" -#~ "Нарешті, натисніть кнопку скидання пристрою" -#~ " та зачекайте кілька секунд, перш ніж" -#~ " повторити спробу." - -#~ msgid "{board_name} board" -#~ msgstr "Плата {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Напишіть MicroPython безпосередньо на пристроях Lego Spike." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro: bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Запускайте MicroPython на BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Прошити" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Прошити код на micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Доступ до файлової системи на micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Використовувати REPL для кодування на micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ваш скрипт задовгий, а мінімізацію коду вимкнено" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ваш скрипт занадто довгий, і мініфікатор недоступний" - -#~ msgid "Problem minifying script" -#~ msgstr "Проблема з мініфікацією скрипта" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Наш мініфікатор спробував, але ваш скрипт занадто довгий!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Не вдається прошити \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Не вдалося знайти приєднаний пристрій BBC micro:bit.." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Будь ласка, переконайтеся, що у вас " -#~ "залишається достатньо часу, щоб його " -#~ "правильно приєднати BBC micro:bit та " -#~ "налаштувати комп'ютер. Це може зайняти " -#~ "кілька секунд. Крім того, спробуйте " -#~ "видалити та повторно підключити пристрій " -#~ "або зберегти свою роботу та " -#~ "перезапустити М'ю, якщо пристрій залишиться" -#~ " без підтвердження." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" -#~ "Неможливо зберегти нетиповий шістнадцятковий " -#~ "файл до локального каталогу." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" -#~ "Якщо у налаштуваннях налаштовано спеціальний" -#~ " шістнадцятковий файл, локальний каталог не" -#~ " може бути використаний для збереження " -#~ "остаточного шістнадцяткового файлу." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" -#~ "Неможливо використовувати спеціальний " -#~ "шістнадцятковий файл без порту micro:bit." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "М'ю не вдалося виявити послідовний порт" -#~ " micro:bit. Зазвичай це нормально, оскільки" -#~ " М'ю може ввести код Python у " -#~ "HEX для прошивки. Однак, це неможливо" -#~ " зробити з користувацьким файлом HEX." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Непідтримуваний BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Ваш пристрій новіший, ніж ця версія " -#~ "М'ю. Оновіть М'ю до останньої версії " -#~ "для підтримки цього пристрою.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Прошивання micro:bit." - -#~ msgid "Runtime" -#~ msgstr "Середовище виконання" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Код скопійовано на micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Виникла проблема з прошиванням micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Будь ласка, не відключайте пристрій, " -#~ "поки прошивання не завершиться. Перевірте " -#~ "журнали для отримання додаткової інформації." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Напишіть MicroPython безпосередньо на Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Використовувати MicroPython на панелі Pyboard" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Не вдалося знайти приєднаний пристрій PyBoard." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Файли Python для пристроїв PyBoard " -#~ "MicroPython зберігаються на пристрої. Тому " -#~ "для редагування цих файлів потрібно " -#~ "підключити пристрій. Доки ви не " -#~ "підключите пристрій, М'ю використовуватиме " -#~ "каталог, знайдений тут:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...для зберігання вашого коду." - -#~ msgid "Web" -#~ msgstr "Веб" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Створюйте прості вебсайти за допомогою вебфреймворку \"Flask\"." - -#~ msgid "Run the web server." -#~ msgstr "Запустити вебсервер." - -#~ msgid "Open your website in a browser." -#~ msgstr "Відкрийте свій вебсайт у вебпереглядачі." - -#~ msgid "Templates" -#~ msgstr "Шаблони" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Завантажте шаблони HTML, що використовуються вашим вебсайтом." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Завантажте файли CSS, що використовуються вашим вебсайтом." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" -#~ "Відкрийте каталог із зображеннями, які " -#~ "використовуються на вашому вебсайті." - -#~ msgid "Stop the web server." -#~ msgstr "Зупинити сервер" - -#~ msgid "This is not a Python file!" -#~ msgstr "Це не файл Python!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "М'ю може обслуговувати лише файл Python." -#~ " Переконайтеся, що поточна вкладка в " -#~ "М'ю відповідає вебзастосунку, а потім " -#~ "спробуйте ще раз." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Не вдається знайти каталог шаблонів!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Щоб обслуговувати вашу вебзастосунок, потрібен" -#~ " каталог 'шаблонів' у тому ж місці," -#~ " що й код Python вашого " -#~ "вебзастосунку. Виправте помилку та повторіть" -#~ " спробу. (Підказка: М'ю очікує, що " -#~ "каталог 'шаблонів' буде тут: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Неможливо відкрити вебсайт - сервер не працює." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "Щоб переглянути свій вебсайт у " -#~ "вебпереглядачі, необхідно запустити локальний " -#~ "вебсервер. Натисніть кнопку \"Запустити\", щоб" -#~ " запустити сервер, а потім спробуйте " -#~ "ще раз." - diff --git a/mu/locale/vi/LC_MESSAGES/mu.po b/mu/locale/vi/LC_MESSAGES/mu.po index 9450cdaaf..e6f3eadf4 100644 --- a/mu/locale/vi/LC_MESSAGES/mu.po +++ b/mu/locale/vi/LC_MESSAGES/mu.po @@ -1590,527 +1590,3 @@ msgstr "Hiển thị nhạc được sử dụng bởi Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Dừng trò chơi Pygame Zero của bạn." - -#~ msgid "Logging to {}" -#~ msgstr "Đang đăng nhập vào {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "Trình gỡ lỗi cần tên tệp lệnh Python để chạy." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Các tệp trên micro:bit của bạn:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Tệp lệnh của bạn quá dài!" - -#~ msgid " Runtime: {}" -#~ msgstr "Bộ thực thi: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Thu gọn mã Python trước khi nạp?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Ghi đè mã chạy MicroPython có sẵn" -#~ " với tệp hex sau (để trống có" -#~ " nghĩa là sử dụng cái mặc " -#~ "định):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Cài đặt BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Hệ thống tệp trên micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Tệp đã tồn tại; ghi đè lên nó?" - -#~ msgid "File already exists" -#~ msgstr "Tệp đã tồn tại" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Đang sao chép '{}' sang micro:bit." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "Đã sao chép thành công '{}' vào micro:bit." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Xóa (không thể hoàn tác)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Đang xóa '{}' khỏi micro:bit." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "Đã xóa thành công '{}' khỏi micro:bit." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Đang lấy '{}' từ micro:bit. Đang sao chép sang '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Đã sao chép thành công '{}' từ micro:bit vào máy tính của bạn." - -#~ msgid "Open in Mu" -#~ msgstr "Mở trong Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Đang mở '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Các tệp trên máy tính của bạn:" - -#~ msgid "Files on your computer:" -#~ msgstr "Các tệp trên máy tính của bạn:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Đã xảy ra sự cố khi lấy danh" -#~ " sách tệp trên micro:bit. Vui lòng" -#~ " kiểm tra nhật ký của Mu để " -#~ "biết thông tin cụ thể. Một cách" -#~ " khác, hãy thử rút ra/cắm vào " -#~ "micro:bit và/hoặc khởi động lại Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Đã xảy ra sự cố khi sao chép" -#~ " tệp '{}' vào micro:bit. Vui lòng " -#~ "kiểm tra nhật ký của Mu để " -#~ "biết thêm thông tin." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Đã xảy ra sự cố khi xóa '{}'" -#~ " khỏi micro:bit. Vui lòng kiểm tra" -#~ " nhật ký của Mu để biết thêm" -#~ " thông tin." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Đã xảy ra sự cố khi lấy '{}'" -#~ " từ micro:bit. Vui lòng kiểm tra " -#~ "nhật ký của Mu để biết thêm " -#~ "thông tin." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Không thể tìm thấy trình chạy MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Trình chạy micro:bit mà bạn đã chỉ" -#~ " định ('{}') không tồn tại. Vui " -#~ "lòng thử lại." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Tệp" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Truy cập hệ thống tệp trên micro:bit." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Sử dụng REPL để chạy lệnh tức thời trên micro:bit." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL và hệ thống tập tin không thể làm việc cùng một lúc." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL và hệ thống tệp đều sử " -#~ "dụng cùng một kết nối nối tiếp " -#~ "USB. Vào mỗi thời điểm, chỉ một" -#~ " cái có thể hoạt động. Tắt hệ" -#~ " thống tệp và thử lại." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Hệ thống tệp và máy vẽ không thể hoạt động cùng một lúc." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Máy vẽ và hệ thống tệp đều " -#~ "sử dụng cùng một kết nối nối " -#~ "tiếp USB. Vào mỗi thời điểm, chỉ" -#~ " một cái có thể hoạt động. Tắt" -#~ " hệ thống tệp và thử lại." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Hệ thống tệp không thể hoạt động cùng lúc với REPL hoặc bản vẽ." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Hệ thống tệp, REPL và máy vẽ " -#~ "sử dụng cùng một kết nối nối " -#~ "tiếp USB. Hãy tắt REPL và máy " -#~ "vẽ rồi thử lại." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Không thể tìm thấy thiết bị được gắn vào." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Hãy đảm bảo rằng thiết bị được cắm vào máy tính này.\n" -#~ "\n" -#~ "Thiết bị phải được nạp sẵn " -#~ "MicroPython trước khi hệ thống tệp " -#~ "hoạt động.\n" -#~ "\n" -#~ "Cuối cùng, nhấn nút reset thiết bị và đợi vài giây trước khi thử lại." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Viết MicroPython cho BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Nạp" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Nạp mã của bạn lên micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Truy cập hệ thống tệp trên micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Sử dụng REPL để chạy lệnh tức thời trên micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Tệp lệnh của bạn quá dài và bộ thu gọn mã không khả dụng" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Tệp lệnh của bạn quá dài và bộ thu gọn mã không khả dụng" - -#~ msgid "Problem minifying script" -#~ msgstr "Có sự cố với tệp lệnh" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Trình thu gọn mã đã thử, nhưng tệp lệnh của bạn quá dài!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Không thể nạp \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Không thể tìm thấy BBC micro:bit được gắn vào." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Hãy đảm bảo bạn đợi đủ thời " -#~ "gian cho BBC micro:bit để kết nối" -#~ " vào định cấu hình chính xác " -#~ "bằng máy tính của bạn. Điều này" -#~ " có thể mất vài giây. Ngoài ra," -#~ " hãy thử gỡ ra và gắn lại " -#~ "thiết bị, hoặc lưu công việc của" -#~ " bạn và khởi động lại Mu nếu" -#~ " thiết bị vẫn không được nhận " -#~ "ra." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "BBC micro:bit không được hỗ trợ." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Thiết bị của bạn mới hơn phiên " -#~ "bản Mu này. Vui lòng cập nhật " -#~ "Mu lên phiên bản mới nhất để " -#~ "hỗ trợ thiết bị này.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Nạp \"{}\" lên micro:bit." - -#~ msgid "Runtime" -#~ msgstr "Chưa có tiêu đề" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Đã sao chép mã vào micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Đã xảy ra sự cố khi nạp micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Vui lòng không ngắt kết nối thiết" -#~ " bị cho đến khi việc nạp hoàn" -#~ " tất. Vui lòng kiểm tra nhật ký" -#~ " để biết thêm thông tin." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Sử dụng CircuitPython trên dòng bo mạch của Adafruit." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Không thể tìm thấy thiết bị được gắn vào." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Các tệp Python cho các thiết bị" -#~ " Adafruit CircuitPython được lưu trữ " -#~ "trên thiết bị. Do đó, để chỉnh " -#~ "sửa các tệp này, bạn cần phải " -#~ "cắm thiết bị vào. Cho đến khi " -#~ "bạn cắm thiết bị, Mu sẽ sử " -#~ "dụng thư mục được tìm thấy ở " -#~ "đây:\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "... để lưu trữ chương trình của bạn." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Hiển thị trợ giúp về Mu trong trình duyệt." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/zh_CN/LC_MESSAGES/mu.po b/mu/locale/zh_CN/LC_MESSAGES/mu.po index 5d926624f..f3cc25c91 100644 --- a/mu/locale/zh_CN/LC_MESSAGES/mu.po +++ b/mu/locale/zh_CN/LC_MESSAGES/mu.po @@ -1537,452 +1537,3 @@ msgstr "显示 Pygame Zero 使用的音乐。" #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "停止你的 Pygame Zero 游戏。" - -#~ msgid "Logging to {}" -#~ msgstr "记录日志到 {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "调试器需要一个Python脚本才能运行。" - -#~ msgid "Files on your micro:bit:" -#~ msgstr "在 micro:bit 上的文件:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "你的脚本太长了!" - -#~ msgid " Runtime: {}" -#~ msgstr " 运行时:{}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "在刷入之前简化 Python 代码?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "使用下面的hex文件重写内置的 MicroPython 运行环境(留空使用默认文件):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "如何将 MicroPython 刷入到你的设备" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. 确定设备类型( ESP8266 或 ESP32 ) 2. 从 https://micropython.org/download " -#~ "下载固件
 3. 连接设备
 4. 用“浏览”按钮加载 .bin" -#~ " 文件
 5. 点击“擦除 & 写入固件”" - -#~ msgid "Browse" -#~ msgstr "浏览" - -#~ msgid "Erase && write firmware" -#~ msgstr "擦除 & 写入固件" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit 设置" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "ESP 固件刷入器" - -#~ msgid "Filesystem on " -#~ msgstr "micro:bit 上的文件系统 " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "文件已存在,是否覆盖?" - -#~ msgid "File already exists" -#~ msgstr "文件已存在" - -#~ msgid "Copying '{}' to device." -#~ msgstr "正在将“{}”复制到设备。" - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "已成功将“{}”复制到设备。" - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "删除(无法撤销)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "正在从设备中删除“{}”。" - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "已成功从设备中删除“{}”。" - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "正从设备中获取“{}”并复制到“{}”。" - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "已成功将“{}”从设备复制到你的电脑上。" - -#~ msgid "Open in Mu" -#~ msgstr "在 Mu 中打开" - -#~ msgid "Write to main.py on device" -#~ msgstr "写入到设备上的 main.py" - -#~ msgid "Opening '{}'" -#~ msgstr "正在打开“{}”" - -#~ msgid "Files on your device:" -#~ msgstr "设备上的文件:" - -#~ msgid "Files on your computer:" -#~ msgstr "电脑上的文件:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "获取设备上的文件列表时出现问题。 请查看Mu的日志以获取技术信息。 或者尝试重新插拔设备和/或重启 Mu 。" - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "将文件“{}”复制到设备上时出现问题。 请查看 Mu 的日志以获取更多信息。" - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "从设备删除“{}”时出现问题。 请查看 Mu 的日志以获取更多信息。" - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "从设备获取“{}\"时出现问题。 请查看 Mu 的日志以获取更多信息。" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "找不到 MicroPython 运行时。" - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "您指定的 micro:bit 运行时(”{}“)不存在。请再试一次。" - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "向 ESP8266/ESP32 开发板刷入 MicroPython。" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "通过 REPL 直接在 {board_name} 上运行你的代码。" - -#~ msgid "Files" -#~ msgstr "文件" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "访问 {board_name} 上的文件系统。" - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "使用 REPL 在 {board_name} 上实时编写代码。" - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL和文件系统不能同时工作。" - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "REPL和文件系统都使用相同的USB串口通讯。任何时候只能使用其中一个功能。请关闭文件系统,然后重试。" - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "绘图器和文件系统无法同时工作。" - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "绘图器和文件系统都使用相同的USB串口通讯。任何时候只能使用其中一个功能。请关闭文件系统,然后重试。" - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "不能在没有活动编辑器标签页时运行程序。" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "“运行”将把当前编辑器标签页的内容传输至设备。未能找到任何打开的标签页。" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "文件系统无法与REPL或绘图器同时工作。" - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "文件系统、REPL、绘图器使用相同的USB串口通讯。 请关闭REPL和绘图器,然后重试。" - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Could not find an attached {board_name}" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "请确保已将设备插入此计算机。\n" -#~ "\n" -#~ "在文件系统工作之前,设备必须已输入MicroPython。\n" -#~ "\n" -#~ "最后,按设备的重置(reset)按钮并等待几秒钟后再重试。" - -#~ msgid "{board_name} board" -#~ msgstr "{board_name} 开发板" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "向 Lego Spike 设备直接刷入 MicroPython 。" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "为 BBC micro:bit 编写 MicroPython 。" - -#~ msgid "Flash" -#~ msgstr "刷入" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "将代码刷入到 micro:bit 上。" - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "访问 micro:bit 上的文件系统。" - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "使用 REPL 在 micro:bit 上实时编写代码。" - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "您的脚本太长,简化器已被禁用" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "您的脚本太长,简化器不可用" - -#~ msgid "Problem minifying script" -#~ msgstr "无法简化脚本" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "我们的简化器尝试过了,但你的脚本实在太长!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "无法刷入“{}”" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "找不到已连接的 BBC micro:bit 。" - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "请确保您留出了足够的时间让您的计算机正确连接和配置 BBC micro:bit " -#~ "设备。这可能需要几秒钟的时间。 或者您可以尝试保存文件并重新连接设备,如果仍未发现设备,您还可以尝试重新启动 Mu" -#~ " 。" - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "无法将自定义 hex 文件保存至本地目录。" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "不支持的 BBC micro:bit 。" - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "您的设备比此版本的 Mu 更新。 请将 Mu 更新到最新版本以支持此设备。\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "正在刷入到 micro:bit " - -#~ msgid "Runtime" -#~ msgstr "运行时" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "已将代码复制到 micro:bit 。" - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "刷入程序到 micro:bit 时出现了一个问题。" - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "在刷入完成之前,请不要断开设备。 请查看日志以获取更多信息。" - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "向 Raspberry Pi Pico 直接刷入 MicroPython 。" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "在 Pyboard 系列开发板上使用 MicroPython " - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "找不到已连接的设备。" - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Adafruit CircuitPython 设备的 Python 文件存储在设备上。" -#~ " 因此,要编辑这些文件,需要您插入设备。在插入设备之前,Mu 将使用这个目录:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "…来存储您的代码。" - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "使用 Flask Web 框架构建简单的网页。" - -#~ msgid "Run the web server." -#~ msgstr "运行网页服务器。" - -#~ msgid "Open your website in a browser." -#~ msgstr "在浏览器中打开你的网站。" - -#~ msgid "Templates" -#~ msgstr "模板" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "加载你的网站使用的 HTML 模板。" - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "加载你的网站使用的 CSS 文件。" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "打开你的网站使用的图片文件目录。" - -#~ msgid "Stop the web server." -#~ msgstr "停止网页服务器。" - -#~ msgid "This is not a Python file!" -#~ msgstr "这不是 Python 文件!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "Mu 只能识别 Python 文件。请确认 Mu 编辑器当前标签页打开的文件属于你的网页应用,然后重试。" - -#~ msgid "Cannot find template directory!" -#~ msgstr "无法找到模板目录!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "无法打开网站 - 服务器未运行。" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "要在浏览器中访问你的网站,必须在本地运行 Web 服务器。点击“运行”按钮以启动服务器,然后重试。" - From 75da699cf07737bb8e844ff0b492c085590f73bb Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:37:34 -0500 Subject: [PATCH 16/18] CLAUDE.md and CHANGES.md: the cleanup, new baseline, star_imports Co-Authored-By: Claude Opus 5.5 --- CHANGES.md | 8 ++++++++ CLAUDE.md | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 90fe30bb9..e75c46522 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -34,6 +34,14 @@ * The Plugins tab drew a stray empty box on the selected row (Windows 11). * The log tab opens at the newest entries. +### Removed + +* Code and files left over from Mu's removed modes: the micro:bit special case + in **Check** (modes can now declare `star_imports`, and the micro:bit plugin + does), unused REPL and file-system hooks, about 35 icon files that were never + loaded, the unused `nudatus` and `semver` dependencies, and obsolete + translations of strings Nu no longer has. + ## 2.0.0 The first stable release of **Nu**, a maintained continuation of the diff --git a/CLAUDE.md b/CLAUDE.md index 4932becb1..52b4edb55 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -48,7 +48,7 @@ Most workflows go through the `Makefile` (which delegates to `make.py`): ``` QT_QPA_PLATFORM=offscreen LANG=en_GB.utf8 uv run --no-sync pytest -q --random-order-bucket=none ``` -(On a box where `/tmp` is mounted noexec, add `--basetemp=$HOME/.cache/nu-pytest/bt`: one test builds and runs a real venv in its `tmp_path`.) Current green baseline (Python 3.11 + PyQt6, with `--all-extras` so the opt-in micro:bit plugin is installed): **1638 passed, 20 skipped** (counts can shift by one between Python versions). The test session is **isolated**: before anything imports `mu`, the root `conftest.py` sets `MU_DATA_DIR`, `MU_HOME_DIR` (both honoured by `mu/config.py`) and `IPYTHONDIR` to a throwaway folder and gives the single-instance lock its own name, so tests never touch the real `~/.local/share/mu`, `~/mu_code` or IPython profile, and they run fine while a real Nu is open (`tests/test_config.py` checks this). Every test file passes on its own and in `--random-order`; autouse fixtures fail a test that really quits the `QApplication` (patch `QCoreApplication.exit`) and restore `sys.excepthook`/`threading.excepthook`. On a headless box without Mesa, Qt6's `offscreen` plugin still needs `libEGL.so.1` — put it on `LD_LIBRARY_PATH` (e.g. `apt-get download libegl1 libglvnd0 && dpkg -x` into a local dir). Lint the project's way with `uv run --no-sync python -m ruff check` and reformat with `... ruff format` (config in `pyproject.toml` `[tool.ruff]`; the gettext `_` builtin is declared there as `builtins = ["_"]`, so no env var dance is needed). +(On a box where `/tmp` is mounted noexec, add `--basetemp=$HOME/.cache/nu-pytest/bt`: one test builds and runs a real venv in its `tmp_path`.) Current green baseline (Python 3.11 + PyQt6, with `--all-extras` so the opt-in micro:bit plugin is installed): **1778 passed, 20 skipped** (counts can shift by one between Python versions). The test session is **isolated**: before anything imports `mu`, the root `conftest.py` sets `MU_DATA_DIR`, `MU_HOME_DIR` (both honoured by `mu/config.py`) and `IPYTHONDIR` to a throwaway folder and gives the single-instance lock its own name, so tests never touch the real `~/.local/share/mu` (the log follows `MU_DATA_DIR` too), `~/mu_code` or IPython profile, and they run fine while a real Nu is open (`tests/test_config.py` checks this). Every test file passes on its own and in `--random-order`; autouse fixtures fail a test that really quits the `QApplication` (patch `QCoreApplication.exit`) and restore `sys.excepthook`/`threading.excepthook`. On a headless box without Mesa, Qt6's `offscreen` plugin still needs `libEGL.so.1` — put it on `LD_LIBRARY_PATH` (e.g. `apt-get download libegl1 libglvnd0 && dpkg -x` into a local dir). Lint the project's way with `uv run --no-sync python -m ruff check` and reformat with `... ruff format` (config in `pyproject.toml` `[tool.ruff]`; the gettext `_` builtin is declared there as `builtins = ["_"]`, so no env var dance is needed). Test layout mirrors the source tree: `tests/test_logic.py` tests `mu/logic.py`, `tests/modes/` tests `mu/modes/`, etc.; each bundled plugin's tests are in `plugins//tests/`. Shared autouse fixtures (QApplication, no autosave, temp drop-in plugins dir, plugin error handler and plugin image registry resets, the quit and exception-hook guards) and the session isolation are in the root `conftest.py`. @@ -64,7 +64,7 @@ Mu is a **modal editor**: a fixed core of always-available features, plus a set - **`mu/interface/`** — the Qt view layer. `interface/main.py` defines the **`Window`** class (the `view` the `Editor` drives). `editor.py` is the Scintilla-based text widget, `panes.py` the REPL/process-output/plotter panes, `dialogs.py` dialogs, `themes.py` the day/night/contrast stylesheets, `widgets.py` small shared widgets. -- **`mu/modes/`** — every mode subclasses **`BaseMode`** in `modes/base.py` (MicroPython-family modes subclass `MicroPythonMode`, which adds REPL/serial plumbing). A mode declares `name`, `description`, `icon`, and implements `actions()` (toolbar buttons), `api()` (autocomplete/calltip data), `workspace_dir()`, etc.; `uses_user_environment` (admin dialog env/packages tabs) and `ensure_workspace_assets(wd)` (called for every mode at startup) replace what used to be hardcoded per mode name — the core must not name plugin modes. New modes should be plugins (`docs/plugins.md`, template `plugins/example/`); a core mode is registered in `app.py` and `modes/__init__.py`. `modes/api/` holds generated API stubs (excluded from ruff, as are `plugins/*/nu_*/api`). +- **`mu/modes/`** — every mode subclasses **`BaseMode`** in `modes/base.py` (MicroPython-family modes subclass `MicroPythonMode`, which adds REPL/serial plumbing). A mode declares `name`, `description`, `icon`, and implements `actions()` (toolbar buttons), `api()` (autocomplete/calltip data), `workspace_dir()`, etc.; `uses_user_environment` (admin dialog env/packages tabs), `ensure_workspace_assets(wd)` (called the first time the mode is used in a session) and `star_imports` (module -> names its `import *` brings in, for Check) replace what used to be hardcoded per mode name — the core must not name plugin modes. New modes should be plugins (`docs/plugins.md`, template `plugins/example/`); a core mode is registered in `app.py` and `modes/__init__.py`. `modes/api/` holds generated API stubs (excluded from ruff, as are `plugins/*/nu_*/api`). - **`mu/virtual_environment.py`** — Mu manages a **separate "user" virtualenv** (the `venv` singleton at module bottom) into which it installs third-party packages requested from the UI, isolated from Mu's own environment. Since Phase 4a it is driven by **uv**: `find_uv()` locates the binary (`MU_UV` → `uv` on `PATH` → the bundled `uv` wheel), `create_venv` builds it from the CPython bundled in installers (`mu/wheels/python/`, extracted once by `ensure_bundled_python` into `DATA_DIR/python/`; builds an upgrade left behind are deleted at startup by `remove_old_bundled_pythons` unless the env's `pyvenv.cfg` points into them) with `--seed --no-index`, so first launch is offline (dev checkouts without the bundle fall back to `uv venv --python --seed`), `Uv` wraps `uv pip`/`uv run` via `QProcess`, and `activation_vars()` activates the env for spawned user code (Run and the Jupyter kernel). Since Phase 4b (part 1) the env is **visible**: every uv command goes through `Uv` (`run_blocking`/`run`/`run_subprocess`/`script_command`), which records it in the GUI-free `mu/command_log.py` ("What Nu ran" on the admin dialog's Environment tab, and INFO in the log) — don't call uv around it; the status bar shows `Environment: · Python X.Y` in modes with `uses_user_environment`; and `mu/script_metadata.py` (PEP 723) makes the Python 3 Run use `uv run --python --script ` for files with a `# /// script` block (see `docs/environment.md`). Bundled wheels live in `mu/wheels/` (`python -m mu.wheels --package` fetches them for installers): `wheels.baseline_packages()` = the core's `mode_packages` (ipykernel) + each installed plugin's `learner-env` extra, read from package metadata (`plugin_packages()`), never by importing the plugin. From 85158fcbdf2621a6f1207a36eafc1043cc565cf0 Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 12:42:14 -0500 Subject: [PATCH 17/18] Use the keep-alive references code scanning flagged as unused - The "isn't responding" message box's QApplication now sets Nu's window icon, so the box carries Nu's icon. - Nu closes its second-launch server at exit, next to releasing the single-instance lock. - utils/make_artwork.py says which Qt platform drew the images. Co-Authored-By: Claude Opus 5.5 --- mu/app.py | 9 ++++++--- utils/make_artwork.py | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/mu/app.py b/mu/app.py index c815372e4..0cf914b3e 100644 --- a/mu/app.py +++ b/mu/app.py @@ -459,7 +459,8 @@ def check_only_running_once(paths=()): if not tell_running_instance(paths, pid): logging.error("The running Nu didn't answer.") if "MU_SUPPRESS_CRASH_REPORT_FORM" not in os.environ: - app = QApplication.instance() or QApplication(sys.argv) # noqa: F841 + app = QApplication.instance() or QApplication(sys.argv) + app.setWindowIcon(load_icon("icon")) # The message box's icon. QMessageBox.information( None, "Nu", @@ -601,11 +602,13 @@ def load_theme(theme): # Restore the previous session along with files passed by the os editor.restore_session(sys.argv[1:]) # Come to the front (and open their files) when Nu is started again. - instance_server = listen_for_other_instances(editor_window, editor) # noqa: F841 + instance_server = listen_for_other_instances(editor_window, editor) # Save the exit code for sys.exit call below. exit_status = app.exec() - # Clean up the shared memory used to signal an app instance is running + # Stop listening for other launches, and clean up the shared memory used + # to signal an app instance is running. + instance_server.close() _shared_memory.release() # Stop the program after the application finishes executing. diff --git a/utils/make_artwork.py b/utils/make_artwork.py index 4704c3904..f717357f8 100644 --- a/utils/make_artwork.py +++ b/utils/make_artwork.py @@ -113,7 +113,8 @@ def mode_button(icon): def main(): - app = QGuiApplication(sys.argv) # noqa: F841 (fonts need an application) + app = QGuiApplication(sys.argv) # Fonts and drawing need an application. + print("Drawing with Qt's {} platform.".format(app.platformName())) family = "Source Code Pro" font_id = QFontDatabase.addApplicationFont( os.path.join(FONTS, "SourceCodePro-Regular.otf") From b1a66284973b019362a9a1c3c048fb2ebf8ea13d Mon Sep 17 00:00:00 2001 From: Evan Gress <106449014+evangress@users.noreply.github.com> Date: Sun, 8 Nov 2026 13:17:15 -0500 Subject: [PATCH 18/18] CHANGES.md: restore the Removed section for this PR's cleanup Lost when master's squash-merged #39 was merged into this branch. Co-Authored-By: Claude Opus 5.5 --- CHANGES.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 90fe30bb9..e75c46522 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -34,6 +34,14 @@ * The Plugins tab drew a stray empty box on the selected row (Windows 11). * The log tab opens at the newest entries. +### Removed + +* Code and files left over from Mu's removed modes: the micro:bit special case + in **Check** (modes can now declare `star_imports`, and the micro:bit plugin + does), unused REPL and file-system hooks, about 35 icon files that were never + loaded, the unused `nudatus` and `semver` dependencies, and obsolete + translations of strings Nu no longer has. + ## 2.0.0 The first stable release of **Nu**, a maintained continuation of the