From 711e83d59f9c1a390738a4a998a40d30ca8bb18b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 09:25:56 +0000 Subject: [PATCH 01/16] Initial plan From d9cc5e54da0d3fb0820f87cd3c32906dc670ee02 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 09:34:51 +0000 Subject: [PATCH 02/16] Create Gunicorn-compatible WSGI entry point for frontend Co-authored-by: MDSharma <7817786+MDSharma@users.noreply.github.com> --- __pycache__/wsgi_t2tbe.cpython-312.pyc | Bin 0 -> 7414 bytes __pycache__/wsgi_t2tfe.cpython-312.pyc | Bin 0 -> 1408 bytes .../src/__pycache__/app.cpython-312.pyc | Bin 0 -> 3215 bytes .../__pycache__/sidebar_icons.cpython-312.pyc | Bin 0 -> 321 bytes .../cytoscape_config.cpython-312.pyc | Bin 0 -> 999 bytes .../cytoscape_styles.cpython-312.pyc | Bin 0 -> 3005 bytes .../__pycache__/layout_styles.cpython-312.pyc | Bin 0 -> 2057 bytes .../__pycache__/ui_elements.cpython-312.pyc | Bin 0 -> 5041 bytes .../pages/__pycache__/home.cpython-312.pyc | Bin 0 -> 4963 bytes .../pages/__pycache__/index.cpython-312.pyc | Bin 0 -> 6346 bytes .../__pycache__/questions.cpython-312.pyc | Bin 0 -> 2436 bytes .../pages/__pycache__/results.cpython-312.pyc | Bin 0 -> 22255 bytes .../__pycache__/data_loader.cpython-312.pyc | Bin 0 -> 3166 bytes .../__pycache__/search_NCBI.cpython-312.pyc | Bin 0 -> 11206 bytes .../__pycache__/search_utils.cpython-312.pyc | Bin 0 -> 5929 bytes wsgi_t2tfe.py | 38 ++++++++++++++++++ 16 files changed, 38 insertions(+) create mode 100644 __pycache__/wsgi_t2tbe.cpython-312.pyc create mode 100644 __pycache__/wsgi_t2tfe.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/__pycache__/app.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/components/app/__pycache__/sidebar_icons.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/components/results/__pycache__/cytoscape_config.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/components/results/__pycache__/cytoscape_styles.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/components/results/__pycache__/layout_styles.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/components/results/__pycache__/ui_elements.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/pages/__pycache__/home.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/pages/__pycache__/index.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/pages/__pycache__/questions.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/pages/__pycache__/results.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/utils/__pycache__/data_loader.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/utils/__pycache__/search_NCBI.cpython-312.pyc create mode 100644 text2trait_forntend_app/src/utils/__pycache__/search_utils.cpython-312.pyc create mode 100644 wsgi_t2tfe.py diff --git a/__pycache__/wsgi_t2tbe.cpython-312.pyc b/__pycache__/wsgi_t2tbe.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a111e434fdbb48373a5e1382ca4c3bb365270b40 GIT binary patch literal 7414 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 literal 0 HcmV?d00001 diff --git a/__pycache__/wsgi_t2tfe.cpython-312.pyc b/__pycache__/wsgi_t2tfe.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3459e255d418029653cbb083c57adf084c82a98f GIT binary patch literal 1408 zcmbVML2n#26!z>)CtGLJZADbtz2HL-L}GVCLM0RdYE;^74xoypsp}*|UboeKe<9}fCHDaiXn8PZu({*ue`W!|AyBt+L!~_m$^U1KB$yFj^*LUIKf@)AdZLEFYfKm@*10Y z{5nGFI-uZTvQf-QrqWz6t_dZbkrZL7WHU^Y3?lSk zdBTfNcx9)&OvKM|!~H3@_o zWhfvs;Fl0%wKP`C0HmF0835I`R$)6Eg9<|)nwCkEctUTv1=Y|a#mNMY8cO;iwlaZ9 zNRq`gl{NS;RYIlj@LWoD3ArB8~sH-TdLAQ+N-kiHev1L+8Q; zp~1_Aw2NvGBvi;C*q%8lvQV!ebZ^luyeQSC@Um2y;u7P%(O~gPF%twV4TAtc#=4k+ z-i%_=Q}!TPEL#{@^fRc9G(~NyUH~Bh%F^b{GT3a~@wboON<58$YkUQ=YK*l)Vh>g{5k=hto@)^GoK>#%-*r}hN7d)3|QUVXQ|?|ikg z|H-c}E&PUFedZ%){>Vpo?#ssKjU6ARUhT8(U)-BdyxE;Qd!60R{>^XZzkT?-w{qkn Kuc2;0=zjsYFPb6% literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/__pycache__/app.cpython-312.pyc b/text2trait_forntend_app/src/__pycache__/app.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e4e23d92cfd8f967e3b48cd8f05d954fe2635ce GIT binary patch literal 3215 zcmb7GOKcm*8J>M``I4x&O-Z!8vh|{Dk&7H^=G1?dq9s%gitd2B zGynXLZ~oWt@AdT&1kb&4NK=~-`WIW&p2ma88(u`{3BqU&VGi>;H^;$O(76&n$8%Mh zFed^{)B`1HPT~*|i?N!T!*8*s@sNaYAkWW*c|^Ek>k;z7lti(FB@*5WZUP4O%+-;) zVn=m;^gUM(I{0GZD6KjNx>)RbC;g}R`J((zey(`tI30&JxhfThaRf#b*WvnS;#O=^ zsM2fuKEj^k8a59|c^T z!Q=8imhL>raW{-J_$(V+J)6NQ zkFV!l{9N(!aV@wPMj!6?$G}!{GgRft^MHO3pL@n1V*h^;0{=Vn5ue9HIEB+kb>rc! zk(!V493DNg;<2=Kp|(frGN)>%fLgjZKL9z=1{L(P8ujpt$MAdj($?i#)^cc>U*=V) za2B&gl)R#R2#FpUw=7*#6<0G2`C~;h+`(DGII17$}u^0KCyU^Hi&CHad_#wTxNrmz3} z_MI=1skd56?3}>m62p}hn<#S5v}L?(C?!pmeYG|*FtI`1p;Qilk^|GKX)W7Yz5qD) zn9pw~IVu+1k`CX_fo3k%q9gIE;}T{5IQvBlr769j+0RpUC%1&e1BJPO{{+>CDK&6H*2sdx)!G%zwcW-ZY`RyWo8mGFp7O0rUR&7?@B0%2#R zfkh3w1scSfV?mgxR8s7`W&kX~u~jN4I`H`Bs0h9!G&n1T2XKo8+hjByEA%Cm3JQ zQZR;4QIUZLo)GM~kkmR2SemXoRds=p;o*hCO7LuMEO#lVtTc^SOR{6?8kWyOtz^lC zq+myx!UpEdyls{ZeBIPdn?|#y4e8*cO>(}vJ$8fbu`6MZbLqZCAMCzc< zGk#sz%+*wK3#0^TANY9s_Uz|2Yxq=TjfDYZZUTz}$WqB6HXNS{6WRh5ZY%JbF6C)` zp12vvFL;-2o$^yQt!IUlu}NM7$3Z$TD0&$z1VQGOX3SG=nhGFAg9mVE_&T@_e8IHO zn2S_^^q?_c3u`CU9jV&Er~u86wFSRg*?)@RA3sYM%o0h%2B=6cn)ZBpmKEfzUyztA z5dApeNXbH*VoeKY;GAhFxis^Ywftk~TFJy^oxE><4tAI=$APS@2pq?K$A>xb%?ZTS zeS_NmiTb}m7b~?7TL9wa%jUd&>Dlt^w3gVNG zCVx9!X-R}5l~Hu6`*k9zmlFxUf;#%#XlOqH@0VA_Wk*nJJ)Al_1*Q(4sZAFoVmOo5ZXH` zA=G|q5yt8)i(LL}>xbdN|7JL+hX;U0< z2G@gLYo~WIzVYevkrz!bezmOtqNZl>@Zo;^b!-1_Yk!Tad7FR9d#8JSk5!uL!D9*3 zJ+S?Y-RAfAPd5U@zPEP1Z9G}Cl6XAvWNLlNi(m214ZWP&?YaS$;Ittm_wGj}uqlK< zRWpir?YBii%Q<$g2@XXY;4nQgi2H9Ml^G6+bq`m*7TP^A$b$X2{dwz)yQ`D`5HC~& YBzFA!`%iiBmBZ@tuMOjElhKLkdF*V+vCW^Bm?VhDsJq)++9#OogOO z-HiOw;?ycp2&b?#wYVfRKTkI~vnV+ywTcTOoRpuRt;u|g#UnpA^%iF!R8jFQR?obY z)CxaM##>wgj_$7Up3eS$!7CX)gKYklub%-_u3uD|mzP?kU!Gr-tsjzFQDPKQl$co( zpORXZnu94&0#Z=|R*{xplvk3PmlB^?P@rF2l&qhepIeZhmzq~ntPd8-Oi4{jEQ-%e z&d)2>E2#X%VUwGmQks)$SHualpAm?Q#eu{JW=2NF4{Qv)Qa1!OZtzNeWM|=HYUCoM|{>o+X{XGpF+Cl=S@hFN$O14EO)65Db4Q(q;|5fT} zmUhjmKdwkqrda|Ov}yVjWra$#o8^U+#T})E?It6486h~Zc#C&n8)V0Jn-n3mK_d7$OO8MnSOnT78JMp#S%yX`NtMLp{gg#QcAE5skRr(v zYQ~N!G%gIXDj~AiEyeqM=` zf#E0g3-V~54EGA{2TsWxlg04y+Ku#s-;8^LmK?~m5wU%bWh8%hj|L?FxgdIiT1mN3A9QHpZm}{d2nJ*9)5iDo75avFJXbdh9y6o literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/components/results/__pycache__/cytoscape_styles.cpython-312.pyc b/text2trait_forntend_app/src/components/results/__pycache__/cytoscape_styles.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a3260d682d044179c571824291be8c7b69841b5 GIT binary patch literal 3005 zcmZ`4O>f)Sk&-Bik}S)XV>^;;eL1nsB(fCAv8A+Icd0+>cG03KZX?%ne1V zkCd|#95ja>wm=Vi>jLWqa!j$89{U4&D9{#2S`PkVjENoi^o5&hiDyFg4G8!uq4FGD(nn8KPM7S|%n4>Kkz`CxrEZpUn%H{I$ ze_y_QNd*NPHYU_(n=J@XFRLYVwE<$dzSuhUfUy+qPt|4ReuJ281LYM{H^~@BYswAW zpB&LqHM<`jp%sYRkBusrGY68i&Uc3}H@g7dGlhat%VeA0Np2O6^X`ZEKAK@LM@s7R?)Dc>k}7sg87zy=##&FM7(h!39UyTFBoHCR_;3+qrsp+he$t%`IPW^^#%x#t*v`v@m=E&q zx*!{%MFXcZI@lDhAI&t#A``+u!j|erSSHs8`C&xEFaU-Hs~&dVF{p9cm#_o1e?fZ= zW0MSUNtOY&CrFL~R!Y}xKhVu<2Ere7!_4u|G?aNOlk0kO_b3lDfwX@!PkcA*7V*KL zq9I)~@NlV(e~gNov-U8yspuYBtQ_BFq98j6YIdiEE!N~2cJ=oQ zdu9_CNZT+lDLgRA{lYG+;nJ>qp19}W|1;QrlzuFJ-2Hg_ zD7WHVD)jt5W-ml0|Kk(kTYO;g;ygE(`HJ)S-}8JJJTrVU{iOQj^5b9qDe>o9&))v= zv&2vSDgN}t$F!hO6LU}b+2>F@PV#I+C)@&zd=CKiSvH}(uEC4d_xBw6A(QO@=!@TM zny9VgZ;>AX$#$W&1rWS?JSP)eWX_46cV<)U7tcA<3HFP@pRqLLOvOQ=mzNuvGV7$WOnGt1i7zZ#uEdpvWGl@pG=|FHYQeY*wzAFqaoLjV8( literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/components/results/__pycache__/layout_styles.cpython-312.pyc b/text2trait_forntend_app/src/components/results/__pycache__/layout_styles.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ebee8ce54a4abfe71f23ca72ad1c8acc34dac2b GIT binary patch literal 2057 zcmaJ>OHUhD6u$P%_=U$WY{0}JHk1UnfFIzJG)YrP+yoUt1g;X0Dr@X>Z6+}@*7cZ& zS6ya_ltnizx~=j@Ds=@*$ZuS^cu;qqH{c@V2Lc3K__{#=5hU<{_sF+Jzz2Q^pnc#-+;Tw>WYx9hh7el& zZx|vF#q$^p9tE}pDm?RFB)I&(I)_^lm7ZPXy*wrmhXf44@R9HeYvGTJs02nJ`O*cW za0O)wuA&@+Ybeu@K{*Z+C_jNol-D7G@&-(y%)+NAKZ9wMSTD*Mm_?a`JjwzTQO-FL z=Arb`wdKWbK6l;)xCyu53+(4M+(FCTqu`d0`u?{gKlT4-M+sPfFOS@p{T$rOe%13% zK!M(*bxSPd+xxv#vAv(>e_TtmW=)yOPdo2yA!~_ErqnDSqbHWf z`kv*fcUcELeQmv?8mg{Yo^7f&w+&0$Q^DA_JRL)=KR@`B6Qceh5Rw%c-zQ5j^tR>c zEo(sct>BKrnyR*>8-~8a2Kc!+kF{AorPk3~U4yE><6R88ts2x4m9C-pGW|^H{OnvO zO_dIvPCGd-4cS0Hm#5|gw!{`~U}cOK=wx9LOvNOg&#&)N)@bQ_o6N)YfWZ{)yeDZc z&x?`f`KK4VnBgRj&@pARLci#Nejn>jf*_CW^eQ#feF`j$hMrK$PqGn?yfcN_h0^Yx z<#$pwbhgvG=0GHiZcfdhXEx1r1GTA{TX~?(tQCIeyM}G3IPW^u49c8N)D`i(9o&-Q zO=V%eWJz_0N*n=a&=NIWqs+@Y6iV%V=Hrzl^UemL{{8|Lvy3-kNzS5JfrhRbPx|zV zHN6Fl|4wmBbd{HYeb9Ylv86UOE8q~d(N^lz@@V=VQ`(j*ZwY*U-ib!3vCz2H3-Pr@ zdR0hI006Fz3P819_yZc%Z?LUw(3zz(L^gzZogq5)^$860J6z!uza#T0OLEsyE*!2o zw^?`p8po^IfR%W-zWDf2_5RvwWpR16yk6a?Y_60oxw5vlvb1=iCYQdgRMu9jUoSr` zKd3$`FF$-#IrmId7ME7a9|aKWdi%f{`|z;*^zq{A1B}s6ZV($a8K_XU}sLq@`G4ifUAW?$XxB22NZN zHw!&*4UtR@s!F?^>#%yRuJ5#QXEdXeW3$|g~L$^i0 zWcRQJ{{Of0GfG=|uH0nx9b|3%4` z5ZN9g1z&91UXFc4iX2Cawx25jA`Knx+XEa2i6p-OTjn^#?FV+4;|Ra}#ExG_pCFMAJM=;RUnbTC^Bvp8w gn!_oZBza2GCnRmkaWfo0lZ0{i-$ZZ;>@G6;4*=UoCjbBd literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/components/results/__pycache__/ui_elements.cpython-312.pyc b/text2trait_forntend_app/src/components/results/__pycache__/ui_elements.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c5b899db5d593498446847c53c96df6ec4c1cf9 GIT binary patch literal 5041 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 literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/pages/__pycache__/home.cpython-312.pyc b/text2trait_forntend_app/src/pages/__pycache__/home.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05e7ee1ffdb2a119f8c37b49f362c21485290cb9 GIT binary patch literal 4963 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 a&2$34iG2mi0d>H(Z|p literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/pages/__pycache__/questions.cpython-312.pyc b/text2trait_forntend_app/src/pages/__pycache__/questions.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff0570a98da3eea53d1a6e2fff02ffbef804a971 GIT binary patch literal 2436 zcmbtV&2Jk;6yLA-D{kdmN^NXU$L$Mz(%JIl;$ zjD0}uiR40%H~=TksQFJg^;BySQUxb&MhTamc(ZmAm*j$2S-Z1u-}}w)z4v?LU-J2! z0oP|yhKd2h_(Q)OUxn`C(6S8Ud&4s}4bSu}W^S7Bw3+E!o0i$J*_)1K5OXU*I|k@H zNy>A)KCkZ}^~~v5Oapwat-;s*^c&cnt>b-rJ}35(9z%DT;EbKMducCokbMTc^_4_l z=&XD1iG8Bi(pe{{lV|N-?wQ%KR!y(}VBj_U|ALe6!5RD?I72-+g;SiW?F}D{^suwG z-Z&?lQE%+DMpgS1>+EWCsA0{HN8bQS?omXfqCAjj4Oa>J{mFM|`SH?vaV=Lo|H|by zYE+_7d%HYPm_jTL(1WE%ND^0Lp$Zr9&G%s$Ng~h}$D8DEnMVq#8tLwWa2PV`VjVW0 z`%~w&I%~#GP5G>uTQ~`fvnNDn?br#is>M!#eG>O6su*d$bC)n)M-3h!7uZy2;3eDm zT&gY?)<9Tp6YrGHV$%uB#p|$P)@4}ARRF}Jpo$G3s5oZ`GWCe0)d0d2hj>W=PY_A4 zaBD8kdGS>USSal zT-XoxglYgV)~~#RWJp|Ep)OJaQzhroI_)?DEBIl=NKjQZNDGp6AyLRM6x=0J&Y?P> zQD2h=(~c$rWg%ELii#JZE1moj9(BqXsu30!~$C@+j ztBHn@2swZN%P#NZF5a27;*49P%o8LKX=o_^s$0>XULTVJv^s}EKou)dkf;YUswjbM zbrUL7K)rRczzm9ChT3{mfX*P-ir|nSc-6R1v>@jYW}pJy2dz5*=b%a5sYH_aUlm1H zd8ma4K~O_fB>|b${nU^iR=A8M>CgaSbEt7I#Reh)20HR|tFqvAs0qNK?SR)A@nA-( zAXOqjK9Zvf7W3#XS3rkg6@iS7dnBn3b5LpY1PT&roxy}@j&o2X-3LUK?jnV$(o=Sl zCNJwrM4;aQyebh$Hvk8}Gg-~44`Dc<8cE|Jy`EOwX@06J-DByfeg_6B1m5LFQjiDO zjhJfaj<35kQLL8T2SJqvga}QoD~3-3x&y_hsxjXjdt8I55nXjhs>X%9vjGD)Bo!8_ zRMYJ9HSV$ZRT&~UQ z;j6vxV=R@RZcRm}Oaj)-gvIN~SH&B%g*aU*dE70PV#mX>CTx&td{Hk;WzH3Z;}E#{ zArGJdGPb?48|MY7!t@hS(prl%rIJ2?0K>jdcVhcvUXSg2oW<6M*W&Dw>vG{i`ciG;FE=`{WAT+qP+%e_1KhIV>3F zz;DL*uf|L}XPBc;oEOH(b7Q3C479T2t?XDUH~x3F&$QYXjNHiX*#5-cM9b-aa_{Tq zr^~I((5}6o-b=RzMtAS;FYhh43d^lYbkt|(2ipTiescHT{=>b8t-|GR?H7g1&kL7d zPF(uI`6=~ds%<&bE9Rk{x;WXkGnX#3M~tca=Fxcn@JM^o7=H7dfb{eu2*~Pyeh8Q_ zrfwZg4T3*9-`|{G0)Jck_ksU_G4=M*PzL;O&rA)rS4{(5Ir_+)$-mX!Fpd0JCxfeA(-L@A;twUomXFpAeDJbbbPhGm> literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/pages/__pycache__/results.cpython-312.pyc b/text2trait_forntend_app/src/pages/__pycache__/results.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e012de94a3ab25c4e4d91e13e2d2febb0b6862a GIT binary patch literal 22255 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 ZQE7xS?uCTe^nlsvp{-Aflo;8u{~sHmhC2WN literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/utils/__pycache__/data_loader.cpython-312.pyc b/text2trait_forntend_app/src/utils/__pycache__/data_loader.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83d9dad6b01b383fa0fc1f5dc86c3b645a5c759d GIT binary patch literal 3166 zcmb_eO>7&-6`tk(aJeMq$off~DDg&40+W%%#zoweC;|wP6xeChqEQT(hC;77Lunau zmzZ5vlDkBNq9|y@sO9Eh0c`;udPv|Na@4WyAt=xb2^p|35zwGL6umLE3j;p&&5%pd ziV?U#hv3Y-nfJbVZ+7N;^Vek3Ku}g|y1kV^=pS4Ni(gzsl*_05-CPb01nn3k)k9@)Y3EIl7p7$ zU=!=w^lA<3zff|?EjbmdeI_AfyiKj@y7@!b!i1WqS2o<)CA&<_3xs;M>!gg?Z!d=N zzHgUpf6FYo)GPyx?W~!Wxh7zX)UBB5w7=n+=imF$vRMRZFP%0|J1!=kX*t*=c#U`| z({_9p%q}|wl<9|?a|^cc?DCvpEN)gw!6&$j;rX;y@N1N0jahS9;BeTiamg^D{A}9B z(^(U=X3Xibb%m7sl211MP?(#WtIr4n=oza3wa6V29uA;9w?+#jw3+rTx<>jC)BaYq zKX(+*_z3|Y9WN`^SgBRZxvRr@LF_UMWG4GiJf9T(KPpmRcL# zfU)IUDdS)Kv!*1b{Mho>ms1K;1t?P%0Ex--&K6VOci@vTLu_uo3VO^C+uQAHRJc@# z3=Rm=pfAJ!-kVV0LOz^`ZVAxsUcWv(D)mRD0F}7qk#f5ydn3LYPGQjf4ftj0*;053!vSc6zBhFlYy215N(j9B|E{1M zUEw47BLzo)8>y>)GIXjm67~jdxSMq?kQdPEIfUxbAc}QP0(IRV4K;&kxVQCK5G##^ zxY01O-}Ye1H)40=+2ND2V-D`jsT1>+dKiP{20}JTd|U$Axck=p{ri zG32Gu_c9qIAM0gu*aOgcI$U+o;`kHjB!+cFB#)uTARZ)&5r`$(i=_auXn|UcyoXMq z*N`V|07YL!68v_g>xoVIBHECS&RqXzcRV#>-Q|SJNr=-au-S)>yHVyhaF`A~Qnje% zlOaYF+}|2QH&se(o~ah7FD#iAH1wAT^N?L>3r0HY><5YrgeZ=7Y>2LWJ~E zv3#I+fee&<2`G0JI9|9K%JtA^%l637#_^oC?D|V?&B2S5x-@H^E1Cp6g{;^071Ec0 z5-Gs6J+oqa9_(Y+(W{fo{Zs=6K72BO%9>Xv7yEf*c$`V}s#^1lvu^-r>%=LzJTWe( zB1{#_F;y(aA~t5KNK;JV`H5-WoWrzkvVl>^GN~lxT+1}FX?woMM!yjcQ`{`95U|x22qUC?^dT<8q!)c^rYCn?ZSqGwW`JWN6KC2+i<} zpIL$E&#X|(_Vbwhl$5_Y!1w2jFErpZI6iT3-l|qJ9xY^Q@CxxVJXPj-@Py7)x0u1Z zd2uS~tKh`*@b^B2OS+Bjo9OuDPHBJi#qINlqZ7SeM?;CpyYZ=ZeCkg8g~O4Pt?4)R zp505d%*FkYrIx;Q5TE$AX|OlOZ=Ae#a(Aq`(Kxvu%XE;WKL7b^hfj^)irtLuzW7O^ zp+1md?0-?!(ZsXO#kP^&e(S!5V(}ZsHRI#N_B>#WPW~Hd>Prpf0K)NarW?`2V`DoD zA75=KU+IY($F3dQjW);c=&u~~B(163(O*8$k2fR^v-7>Sergx*>!&(N!08+ph`Rb6 zK!j~szxhH#>vs;vpV=M%ioZG`>Be>v7ip(<_rpn*8UdCzre5s+HNv9#Ja!BDJd5(zPT9U9t_kIdhw0%{l0L^p4ek-#K&pU1`O}2* zw-4osp2_f9q*Gkvr{ptq4{AiyP(9RtP;qgsOx~p51(83AJOWimmL%!x$hf5ZX9h_p zzC`ga(Zt_SdLN}bT2?x~`+9S%iJK?d&%N3~An#4=d4F8k+iHLRoRI%QS}Pasu6)p5 f`Ji{RB4e)`?AwoaoWr7eQre0z)JrG-lZ6n literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/utils/__pycache__/search_NCBI.cpython-312.pyc b/text2trait_forntend_app/src/utils/__pycache__/search_NCBI.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28575e1f737a8c992462fca4c8db4e05d954beb2 GIT binary patch literal 11206 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 E04w&rL;wH) literal 0 HcmV?d00001 diff --git a/text2trait_forntend_app/src/utils/__pycache__/search_utils.cpython-312.pyc b/text2trait_forntend_app/src/utils/__pycache__/search_utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea138ea2d3e71c45c08ceff3f92457425db5b9e0 GIT binary patch literal 5929 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 R)zfEJ62IR07(q;%{|#@sblm^| literal 0 HcmV?d00001 diff --git a/wsgi_t2tfe.py b/wsgi_t2tfe.py new file mode 100644 index 0000000..466562b --- /dev/null +++ b/wsgi_t2tfe.py @@ -0,0 +1,38 @@ +""" +WSGI Entry Point for Text2Trait Frontend Application +====================================================== + +This module provides a Gunicorn-compatible WSGI entry point for the Text2Trait +frontend Dash application. + +Usage with Gunicorn: + gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 4 + +Environment Setup: + 1. Install dependencies from text2trait_forntend_app/src/pyproject.toml + 2. Ensure all data files are in place + 3. Set appropriate environment variables if needed + +The application is a Dash-based frontend that provides: + - Multi-page navigation + - GWAS data visualization + - Interactive search functionality + - Results visualization with Cytoscape graphs +""" + +import sys +from pathlib import Path + +# Add the frontend source directory to Python path +frontend_src = Path(__file__).parent / "text2trait_forntend_app" / "src" +sys.path.insert(0, str(frontend_src)) + +# Import the Dash app and expose the Flask server +from app import app + +# Expose the WSGI server for Gunicorn +server = app.server + +# For local testing only +if __name__ == "__main__": + app.run(host="0.0.0.0", port=8050, debug=False) From af63e57c4b5b3bb2dccc27ae60745e31742642d5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 09:35:31 +0000 Subject: [PATCH 03/16] Add .gitignore to exclude Python cache files Co-authored-by: MDSharma <7817786+MDSharma@users.noreply.github.com> --- .gitignore | 33 ++++++++++++++++++ __pycache__/wsgi_t2tbe.cpython-312.pyc | Bin 7414 -> 0 bytes __pycache__/wsgi_t2tfe.cpython-312.pyc | Bin 1408 -> 0 bytes .../src/__pycache__/app.cpython-312.pyc | Bin 3215 -> 0 bytes .../__pycache__/sidebar_icons.cpython-312.pyc | Bin 321 -> 0 bytes .../cytoscape_config.cpython-312.pyc | Bin 999 -> 0 bytes .../cytoscape_styles.cpython-312.pyc | Bin 3005 -> 0 bytes .../__pycache__/layout_styles.cpython-312.pyc | Bin 2057 -> 0 bytes .../__pycache__/ui_elements.cpython-312.pyc | Bin 5041 -> 0 bytes .../pages/__pycache__/home.cpython-312.pyc | Bin 4963 -> 0 bytes .../pages/__pycache__/index.cpython-312.pyc | Bin 6346 -> 0 bytes .../__pycache__/questions.cpython-312.pyc | Bin 2436 -> 0 bytes .../pages/__pycache__/results.cpython-312.pyc | Bin 22255 -> 0 bytes .../__pycache__/data_loader.cpython-312.pyc | Bin 3166 -> 0 bytes .../__pycache__/search_NCBI.cpython-312.pyc | Bin 11206 -> 0 bytes .../__pycache__/search_utils.cpython-312.pyc | Bin 5929 -> 0 bytes 16 files changed, 33 insertions(+) create mode 100644 .gitignore delete mode 100644 __pycache__/wsgi_t2tbe.cpython-312.pyc delete mode 100644 __pycache__/wsgi_t2tfe.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/__pycache__/app.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/components/app/__pycache__/sidebar_icons.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/components/results/__pycache__/cytoscape_config.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/components/results/__pycache__/cytoscape_styles.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/components/results/__pycache__/layout_styles.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/components/results/__pycache__/ui_elements.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/pages/__pycache__/home.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/pages/__pycache__/index.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/pages/__pycache__/questions.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/pages/__pycache__/results.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/utils/__pycache__/data_loader.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/utils/__pycache__/search_NCBI.cpython-312.pyc delete mode 100644 text2trait_forntend_app/src/utils/__pycache__/search_utils.cpython-312.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d8f5fe6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +*.egg-info/ +dist/ +build/ + +# Virtual environments +venv/ +env/ +ENV/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log +logs/ + +# Model checkpoints and data (large files) +*.ckpt +*.pth +*.pt diff --git a/__pycache__/wsgi_t2tbe.cpython-312.pyc b/__pycache__/wsgi_t2tbe.cpython-312.pyc deleted file mode 100644 index a111e434fdbb48373a5e1382ca4c3bb365270b40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7414 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 diff --git a/__pycache__/wsgi_t2tfe.cpython-312.pyc b/__pycache__/wsgi_t2tfe.cpython-312.pyc deleted file mode 100644 index 3459e255d418029653cbb083c57adf084c82a98f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1408 zcmbVML2n#26!z>)CtGLJZADbtz2HL-L}GVCLM0RdYE;^74xoypsp}*|UboeKe<9}fCHDaiXn8PZu({*ue`W!|AyBt+L!~_m$^U1KB$yFj^*LUIKf@)AdZLEFYfKm@*10Y z{5nGFI-uZTvQf-QrqWz6t_dZbkrZL7WHU^Y3?lSk zdBTfNcx9)&OvKM|!~H3@_o zWhfvs;Fl0%wKP`C0HmF0835I`R$)6Eg9<|)nwCkEctUTv1=Y|a#mNMY8cO;iwlaZ9 zNRq`gl{NS;RYIlj@LWoD3ArB8~sH-TdLAQ+N-kiHev1L+8Q; zp~1_Aw2NvGBvi;C*q%8lvQV!ebZ^luyeQSC@Um2y;u7P%(O~gPF%twV4TAtc#=4k+ z-i%_=Q}!TPEL#{@^fRc9G(~NyUH~Bh%F^b{GT3a~@wboON<58$YkUQ=YK*l)Vh>g{5k=hto@)^GoK>#%-*r}hN7d)3|QUVXQ|?|ikg z|H-c}E&PUFedZ%){>Vpo?#ssKjU6ARUhT8(U)-BdyxE;Qd!60R{>^XZzkT?-w{qkn Kuc2;0=zjsYFPb6% diff --git a/text2trait_forntend_app/src/__pycache__/app.cpython-312.pyc b/text2trait_forntend_app/src/__pycache__/app.cpython-312.pyc deleted file mode 100644 index 0e4e23d92cfd8f967e3b48cd8f05d954fe2635ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3215 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 diff --git a/text2trait_forntend_app/src/components/results/__pycache__/cytoscape_styles.cpython-312.pyc b/text2trait_forntend_app/src/components/results/__pycache__/cytoscape_styles.cpython-312.pyc deleted file mode 100644 index 3a3260d682d044179c571824291be8c7b69841b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3005 zcmZ`4O>f)Sk&-Bik}S)XV>^;;eL1nsB(fCAv8A+Icd0+>cG03KZX?%ne1V zkCd|#95ja>wm=Vi>jLWqa!j$89{U4&D9{#2S`PkVjENoi^o5&hiDyFg4G8!uq4FGD(nn8KPM7S|%n4>Kkz`CxrEZpUn%H{I$ ze_y_QNd*NPHYU_(n=J@XFRLYVwE<$dzSuhUfUy+qPt|4ReuJ281LYM{H^~@BYswAW zpB&LqHM<`jp%sYRkBusrGY68i&Uc3}H@g7dGlhat%VeA0Np2O6^X`ZEKAK@LM@s7R?)Dc>k}7sg87zy=##&FM7(h!39UyTFBoHCR_;3+qrsp+he$t%`IPW^^#%x#t*v`v@m=E&q zx*!{%MFXcZI@lDhAI&t#A``+u!j|erSSHs8`C&xEFaU-Hs~&dVF{p9cm#_o1e?fZ= zW0MSUNtOY&CrFL~R!Y}xKhVu<2Ere7!_4u|G?aNOlk0kO_b3lDfwX@!PkcA*7V*KL zq9I)~@NlV(e~gNov-U8yspuYBtQ_BFq98j6YIdiEE!N~2cJ=oQ zdu9_CNZT+lDLgRA{lYG+;nJ>qp19}W|1;QrlzuFJ-2Hg_ zD7WHVD)jt5W-ml0|Kk(kTYO;g;ygE(`HJ)S-}8JJJTrVU{iOQj^5b9qDe>o9&))v= zv&2vSDgN}t$F!hO6LU}b+2>F@PV#I+C)@&zd=CKiSvH}(uEC4d_xBw6A(QO@=!@TM zny9VgZ;>AX$#$W&1rWS?JSP)eWX_46cV<)U7tcA<3HFP@pRqLLOvOQ=mzNuvGV7$WOnGt1i7zZ#uEdpvWGl@pG=|FHYQeY*wzAFqaoLjV8( diff --git a/text2trait_forntend_app/src/components/results/__pycache__/layout_styles.cpython-312.pyc b/text2trait_forntend_app/src/components/results/__pycache__/layout_styles.cpython-312.pyc deleted file mode 100644 index 1ebee8ce54a4abfe71f23ca72ad1c8acc34dac2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2057 zcmaJ>OHUhD6u$P%_=U$WY{0}JHk1UnfFIzJG)YrP+yoUt1g;X0Dr@X>Z6+}@*7cZ& zS6ya_ltnizx~=j@Ds=@*$ZuS^cu;qqH{c@V2Lc3K__{#=5hU<{_sF+Jzz2Q^pnc#-+;Tw>WYx9hh7el& zZx|vF#q$^p9tE}pDm?RFB)I&(I)_^lm7ZPXy*wrmhXf44@R9HeYvGTJs02nJ`O*cW za0O)wuA&@+Ybeu@K{*Z+C_jNol-D7G@&-(y%)+NAKZ9wMSTD*Mm_?a`JjwzTQO-FL z=Arb`wdKWbK6l;)xCyu53+(4M+(FCTqu`d0`u?{gKlT4-M+sPfFOS@p{T$rOe%13% zK!M(*bxSPd+xxv#vAv(>e_TtmW=)yOPdo2yA!~_ErqnDSqbHWf z`kv*fcUcELeQmv?8mg{Yo^7f&w+&0$Q^DA_JRL)=KR@`B6Qceh5Rw%c-zQ5j^tR>c zEo(sct>BKrnyR*>8-~8a2Kc!+kF{AorPk3~U4yE><6R88ts2x4m9C-pGW|^H{OnvO zO_dIvPCGd-4cS0Hm#5|gw!{`~U}cOK=wx9LOvNOg&#&)N)@bQ_o6N)YfWZ{)yeDZc z&x?`f`KK4VnBgRj&@pARLci#Nejn>jf*_CW^eQ#feF`j$hMrK$PqGn?yfcN_h0^Yx z<#$pwbhgvG=0GHiZcfdhXEx1r1GTA{TX~?(tQCIeyM}G3IPW^u49c8N)D`i(9o&-Q zO=V%eWJz_0N*n=a&=NIWqs+@Y6iV%V=Hrzl^UemL{{8|Lvy3-kNzS5JfrhRbPx|zV zHN6Fl|4wmBbd{HYeb9Ylv86UOE8q~d(N^lz@@V=VQ`(j*ZwY*U-ib!3vCz2H3-Pr@ zdR0hI006Fz3P819_yZc%Z?LUw(3zz(L^gzZogq5)^$860J6z!uza#T0OLEsyE*!2o zw^?`p8po^IfR%W-zWDf2_5RvwWpR16yk6a?Y_60oxw5vlvb1=iCYQdgRMu9jUoSr` zKd3$`FF$-#IrmId7ME7a9|aKWdi%f{`|z;*^zq{A1B}s6ZV($a8K_XU}sLq@`G4ifUAW?$XxB22NZN zHw!&*4UtR@s!F?^>#%yRuJ5#QXEdXeW3$|g~L$^i0 zWcRQJ{{Of0GfG=|uH0nx9b|3%4` z5ZN9g1z&91UXFc4iX2Cawx25jA`Knx+XEa2i6p-OTjn^#?FV+4;|Ra}#ExG_pCFMAJM=;RUnbTC^Bvp8w gn!_oZBza2GCnRmkaWfo0lZ0{i-$ZZ;>@G6;4*=UoCjbBd diff --git a/text2trait_forntend_app/src/components/results/__pycache__/ui_elements.cpython-312.pyc b/text2trait_forntend_app/src/components/results/__pycache__/ui_elements.cpython-312.pyc deleted file mode 100644 index 2c5b899db5d593498446847c53c96df6ec4c1cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5041 zcmcgwYitzP6~6P>oqc#8e(xF+CKO^ez%DqcR4jvJaAQoUk%C(#R?%iWbGfcU_Dp~DJp@y9 zSHVYgr&FBGpH>ai<_A^Tv;${KRGCyrF*ct!i-i$8V4R%CN|u^y*#4SH zGP`kRs2Ro_Tx(IFE+7-OyVfQfxm=p*tIztq(Z;=DHn2hUMh&x$k9zdlU13&S&7Z=@ zenvjd`x_K73lr=mUqA%VSMqb#&-a^60X zx;^Do!10Y*eAc5dEq?J*38DwW^E{qzP(|e&6niM66B0djBitE+3r>7x&FK>E5%=j{ zK!qI6H=H1D5IFE;A~~TKOS*^FyH84!q&2v3;X7qu9Z^MRsJ9 z2{YVCW?(eM+ktVNIElgb<@Jl0*dc-q&}66=u`NInQ%hJ$1#J%U3rMBujL@KjaUM&G z&5jbd^6)sWE7LGkY%Yh*6h{Q$BGi*@o?2nh@Q2-ad?Az9i#S8dnubYcN+;(tqxh29 z>sXvs@I_pBnqX3n+JQnc)J(``Sx8$MgUA`VzBL)Jy<9MjOj*sk`(va_({_BErgJAf zWu1&nUI1e{;4=OM-4(Rng_>eFj$Avk?nja48>gGBvQRLv#j(gn) zt+uo$Z1C2}niMUONp@ zx&RsK5@SG=s%Vy}unKd2ADpKzhZOdE%q*t`fyOyB9%wwJ<#MNu zA;nkmP1du$rwYFA{uP({9{LV9>#s0daaH^(@^Vt$8lfVP=8CWtzan^2$xMZxY+RkI zx*^N{*WZ?BtR(OZdeF1QTY>l7V8a%fUJ03DZ=WvLzbZ<22EJ#vn><;$dVck!GU)m* zy>l{{>%aN`tzU_FR(ZBOe}&IDyXZE_iEWdd_%_LD-X=LM+a#xTo8+`TEhiW7Jixm% zkPWT}d1OXBpPt+Tku>;A+~eE0H_UDkvzIwQQUMo9bwb_=H1N}$_C%}HZ3L{6bg)XD z;#u7wVT%f+!h3vxZQ9*mhtjDsw-YO_g>{4z0ECm2&VL%hG4lEpML5bP{7<33Q)76L z$N7?qP;``tZemq4pdz3UV>9x39;7)SVoA=|fDHvPE^1Mg9#PViMhsJf7F4?T<>(W= zLcoDX0G&!D50+(Bg#xlI?59YoL6-OJ=@WO;)$FFL+3hZ8x4WGG6%UbaIP_FtCNu;^ zSl%hSW`a&dMS-9l9>j(W$c7d*cIZT&=tbQCP+~Wo0f0yb3aVs4Arl_LnqE}pVK@a_ zI9o0jB{B`g5XniJY7}k3wHm6W_<$^9!vJ|-fvOR1WH(qa6FZA9l(8mb@if+QX8tkL zXA5-Iuv_#qY-T6)vZfFk5;m(UGhHKkW4$MqONvt`PGj>U`n`k#Opx`$*^;E$0IcY0 z98KhNFiG~%ZZGX#qFoPkqjq3I*UYo(44x4VrN8ibf{Q61p;1O?5kP2!kXGnypJ7fH za4Jl8&?i5fEubt1>=6hnM7k)MD`1V#m>})6qZo=LXh+MBRL}u@WEUlf(Afe7iLfI! zPxLA1RTCF&4*U*=bXS?YLH{tIPUbYSlfLERHOK90cE$Kf(sp+dQWsv?RfzVWri z-YX{`3h}wu?h9RySf+KDxh6aew#=#bgS+gOlUId@;mDQ2)%eae)b5L4rudE5uf6_l{+4i4aN*%1e=Be^u(V@Y`EmaJ{2g;evl2(G_%V0-ZsOHn$RG6l zyzsljKhr*pf2r!@UIg&QC1dM|i^Qt|6ls4LZd>$Q;TN7Oe%wkNw&J~;wRSACR${*u zKd_m+bD3C)UMv2}W^(uPmO@^*143T0;;(Mzeuj|ba<7$0Tk*_h?ylwIRw84?4^^9k zbb-NS>=P7(1twwJ*V8Vx{s(LzAnR|L3sdt`cZUABtAF{z_xT?Q-xZdbAB67j>bE+N zT203u)Y#@stEn3{3@~n>5#z4Ll8Z;~M)$6_hA7qz0oMK7u6~22-QOp>PrVpVu_Lwc zkJv&stLSnzYx|+>f<#3qAS68PXd!Cz3jAABD`%2)m>u{2xXEr56^^&t9F#&em#3uz zq5k+jT7w=rF8espU(}Uy0UslSK%=2*yaQd8V;JURHpKA%N+4$6J=F6T)c$AGQ;qIr z{7bD>1h+e*Ki%__F=zO}iQf+YYIu!Ot6yc%{>*Coj*o>t#t-;@k)Q9Yaxi`v?U*yc oQ`;7Y=P%!j_Edd9tol*BwMtoGyZphgzxB>r>p^%TC%}sT0AaICCIA2c diff --git a/text2trait_forntend_app/src/pages/__pycache__/home.cpython-312.pyc b/text2trait_forntend_app/src/pages/__pycache__/home.cpython-312.pyc deleted file mode 100644 index 05e7ee1ffdb2a119f8c37b49f362c21485290cb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4963 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 a&2$34iG2mi0d>H(Z|p diff --git a/text2trait_forntend_app/src/pages/__pycache__/questions.cpython-312.pyc b/text2trait_forntend_app/src/pages/__pycache__/questions.cpython-312.pyc deleted file mode 100644 index ff0570a98da3eea53d1a6e2fff02ffbef804a971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2436 zcmbtV&2Jk;6yLA-D{kdmN^NXU$L$Mz(%JIl;$ zjD0}uiR40%H~=TksQFJg^;BySQUxb&MhTamc(ZmAm*j$2S-Z1u-}}w)z4v?LU-J2! z0oP|yhKd2h_(Q)OUxn`C(6S8Ud&4s}4bSu}W^S7Bw3+E!o0i$J*_)1K5OXU*I|k@H zNy>A)KCkZ}^~~v5Oapwat-;s*^c&cnt>b-rJ}35(9z%DT;EbKMducCokbMTc^_4_l z=&XD1iG8Bi(pe{{lV|N-?wQ%KR!y(}VBj_U|ALe6!5RD?I72-+g;SiW?F}D{^suwG z-Z&?lQE%+DMpgS1>+EWCsA0{HN8bQS?omXfqCAjj4Oa>J{mFM|`SH?vaV=Lo|H|by zYE+_7d%HYPm_jTL(1WE%ND^0Lp$Zr9&G%s$Ng~h}$D8DEnMVq#8tLwWa2PV`VjVW0 z`%~w&I%~#GP5G>uTQ~`fvnNDn?br#is>M!#eG>O6su*d$bC)n)M-3h!7uZy2;3eDm zT&gY?)<9Tp6YrGHV$%uB#p|$P)@4}ARRF}Jpo$G3s5oZ`GWCe0)d0d2hj>W=PY_A4 zaBD8kdGS>USSal zT-XoxglYgV)~~#RWJp|Ep)OJaQzhroI_)?DEBIl=NKjQZNDGp6AyLRM6x=0J&Y?P> zQD2h=(~c$rWg%ELii#JZE1moj9(BqXsu30!~$C@+j ztBHn@2swZN%P#NZF5a27;*49P%o8LKX=o_^s$0>XULTVJv^s}EKou)dkf;YUswjbM zbrUL7K)rRczzm9ChT3{mfX*P-ir|nSc-6R1v>@jYW}pJy2dz5*=b%a5sYH_aUlm1H zd8ma4K~O_fB>|b${nU^iR=A8M>CgaSbEt7I#Reh)20HR|tFqvAs0qNK?SR)A@nA-( zAXOqjK9Zvf7W3#XS3rkg6@iS7dnBn3b5LpY1PT&roxy}@j&o2X-3LUK?jnV$(o=Sl zCNJwrM4;aQyebh$Hvk8}Gg-~44`Dc<8cE|Jy`EOwX@06J-DByfeg_6B1m5LFQjiDO zjhJfaj<35kQLL8T2SJqvga}QoD~3-3x&y_hsxjXjdt8I55nXjhs>X%9vjGD)Bo!8_ zRMYJ9HSV$ZRT&~UQ z;j6vxV=R@RZcRm}Oaj)-gvIN~SH&B%g*aU*dE70PV#mX>CTx&td{Hk;WzH3Z;}E#{ zArGJdGPb?48|MY7!t@hS(prl%rIJ2?0K>jdcVhcvUXSg2oW<6M*W&Dw>vG{i`ciG;FE=`{WAT+qP+%e_1KhIV>3F zz;DL*uf|L}XPBc;oEOH(b7Q3C479T2t?XDUH~x3F&$QYXjNHiX*#5-cM9b-aa_{Tq zr^~I((5}6o-b=RzMtAS;FYhh43d^lYbkt|(2ipTiescHT{=>b8t-|GR?H7g1&kL7d zPF(uI`6=~ds%<&bE9Rk{x;WXkGnX#3M~tca=Fxcn@JM^o7=H7dfb{eu2*~Pyeh8Q_ zrfwZg4T3*9-`|{G0)Jck_ksU_G4=M*PzL;O&rA)rS4{(5Ir_+)$-mX!Fpd0JCxfeA(-L@A;twUomXFpAeDJbbbPhGm> diff --git a/text2trait_forntend_app/src/pages/__pycache__/results.cpython-312.pyc b/text2trait_forntend_app/src/pages/__pycache__/results.cpython-312.pyc deleted file mode 100644 index 7e012de94a3ab25c4e4d91e13e2d2febb0b6862a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22255 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 ZQE7xS?uCTe^nlsvp{-Aflo;8u{~sHmhC2WN diff --git a/text2trait_forntend_app/src/utils/__pycache__/data_loader.cpython-312.pyc b/text2trait_forntend_app/src/utils/__pycache__/data_loader.cpython-312.pyc deleted file mode 100644 index 83d9dad6b01b383fa0fc1f5dc86c3b645a5c759d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3166 zcmb_eO>7&-6`tk(aJeMq$off~DDg&40+W%%#zoweC;|wP6xeChqEQT(hC;77Lunau zmzZ5vlDkBNq9|y@sO9Eh0c`;udPv|Na@4WyAt=xb2^p|35zwGL6umLE3j;p&&5%pd ziV?U#hv3Y-nfJbVZ+7N;^Vek3Ku}g|y1kV^=pS4Ni(gzsl*_05-CPb01nn3k)k9@)Y3EIl7p7$ zU=!=w^lA<3zff|?EjbmdeI_AfyiKj@y7@!b!i1WqS2o<)CA&<_3xs;M>!gg?Z!d=N zzHgUpf6FYo)GPyx?W~!Wxh7zX)UBB5w7=n+=imF$vRMRZFP%0|J1!=kX*t*=c#U`| z({_9p%q}|wl<9|?a|^cc?DCvpEN)gw!6&$j;rX;y@N1N0jahS9;BeTiamg^D{A}9B z(^(U=X3Xibb%m7sl211MP?(#WtIr4n=oza3wa6V29uA;9w?+#jw3+rTx<>jC)BaYq zKX(+*_z3|Y9WN`^SgBRZxvRr@LF_UMWG4GiJf9T(KPpmRcL# zfU)IUDdS)Kv!*1b{Mho>ms1K;1t?P%0Ex--&K6VOci@vTLu_uo3VO^C+uQAHRJc@# z3=Rm=pfAJ!-kVV0LOz^`ZVAxsUcWv(D)mRD0F}7qk#f5ydn3LYPGQjf4ftj0*;053!vSc6zBhFlYy215N(j9B|E{1M zUEw47BLzo)8>y>)GIXjm67~jdxSMq?kQdPEIfUxbAc}QP0(IRV4K;&kxVQCK5G##^ zxY01O-}Ye1H)40=+2ND2V-D`jsT1>+dKiP{20}JTd|U$Axck=p{ri zG32Gu_c9qIAM0gu*aOgcI$U+o;`kHjB!+cFB#)uTARZ)&5r`$(i=_auXn|UcyoXMq z*N`V|07YL!68v_g>xoVIBHECS&RqXzcRV#>-Q|SJNr=-au-S)>yHVyhaF`A~Qnje% zlOaYF+}|2QH&se(o~ah7FD#iAH1wAT^N?L>3r0HY><5YrgeZ=7Y>2LWJ~E zv3#I+fee&<2`G0JI9|9K%JtA^%l637#_^oC?D|V?&B2S5x-@H^E1Cp6g{;^071Ec0 z5-Gs6J+oqa9_(Y+(W{fo{Zs=6K72BO%9>Xv7yEf*c$`V}s#^1lvu^-r>%=LzJTWe( zB1{#_F;y(aA~t5KNK;JV`H5-WoWrzkvVl>^GN~lxT+1}FX?woMM!yjcQ`{`95U|x22qUC?^dT<8q!)c^rYCn?ZSqGwW`JWN6KC2+i<} zpIL$E&#X|(_Vbwhl$5_Y!1w2jFErpZI6iT3-l|qJ9xY^Q@CxxVJXPj-@Py7)x0u1Z zd2uS~tKh`*@b^B2OS+Bjo9OuDPHBJi#qINlqZ7SeM?;CpyYZ=ZeCkg8g~O4Pt?4)R zp505d%*FkYrIx;Q5TE$AX|OlOZ=Ae#a(Aq`(Kxvu%XE;WKL7b^hfj^)irtLuzW7O^ zp+1md?0-?!(ZsXO#kP^&e(S!5V(}ZsHRI#N_B>#WPW~Hd>Prpf0K)NarW?`2V`DoD zA75=KU+IY($F3dQjW);c=&u~~B(163(O*8$k2fR^v-7>Sergx*>!&(N!08+ph`Rb6 zK!j~szxhH#>vs;vpV=M%ioZG`>Be>v7ip(<_rpn*8UdCzre5s+HNv9#Ja!BDJd5(zPT9U9t_kIdhw0%{l0L^p4ek-#K&pU1`O}2* zw-4osp2_f9q*Gkvr{ptq4{AiyP(9RtP;qgsOx~p51(83AJOWimmL%!x$hf5ZX9h_p zzC`ga(Zt_SdLN}bT2?x~`+9S%iJK?d&%N3~An#4=d4F8k+iHLRoRI%QS}Pasu6)p5 f`Ji{RB4e)`?AwoaoWr7eQre0z)JrG-lZ6n diff --git a/text2trait_forntend_app/src/utils/__pycache__/search_NCBI.cpython-312.pyc b/text2trait_forntend_app/src/utils/__pycache__/search_NCBI.cpython-312.pyc deleted file mode 100644 index 28575e1f737a8c992462fca4c8db4e05d954beb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11206 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 E04w&rL;wH) diff --git a/text2trait_forntend_app/src/utils/__pycache__/search_utils.cpython-312.pyc b/text2trait_forntend_app/src/utils/__pycache__/search_utils.cpython-312.pyc deleted file mode 100644 index ea138ea2d3e71c45c08ceff3f92457425db5b9e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5929 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 R)zfEJ62IR07(q;%{|#@sblm^| From ad00d634315c4e73478a984ee904bda82c93e405 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 09:36:56 +0000 Subject: [PATCH 04/16] Add comprehensive deployment guide for frontend WSGI Co-authored-by: MDSharma <7817786+MDSharma@users.noreply.github.com> --- DEPLOYMENT.md | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 DEPLOYMENT.md diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 0000000..3a7ecef --- /dev/null +++ b/DEPLOYMENT.md @@ -0,0 +1,244 @@ +# Deployment Guide - Text2Trait Frontend + +This guide explains how to deploy the Text2Trait frontend application using Gunicorn and the provided WSGI entry point. + +## Prerequisites + +1. Python 3.12 or higher +2. Install dependencies from `text2trait_forntend_app/src/pyproject.toml`: + ```bash + cd text2trait_forntend_app/src + pip install -r pyproject.toml + # or with poetry: + poetry install + ``` + +3. Install Gunicorn: + ```bash + pip install gunicorn + ``` + +## WSGI Entry Point + +The `wsgi_t2tfe.py` file at the root of the repository provides a Gunicorn-compatible WSGI entry point for the Text2Trait frontend Dash application. + +## Usage + +### Local Development + +For local development and testing: + +```bash +python wsgi_t2tfe.py +``` + +The application will be available at `http://localhost:8050/` + +### Production Deployment with Gunicorn + +For production deployment, use Gunicorn: + +```bash +gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 4 +``` + +#### Recommended Gunicorn Configuration + +```bash +gunicorn wsgi_t2tfe:server \ + --bind 0.0.0.0:8050 \ + --workers 4 \ + --timeout 120 \ + --access-logfile /var/log/text2trait/access.log \ + --error-logfile /var/log/text2trait/error.log \ + --log-level info +``` + +#### Configuration Options Explained + +- `--bind 0.0.0.0:8050` - Bind to all interfaces on port 8050 +- `--workers 4` - Use 4 worker processes (adjust based on CPU cores: 2-4 × CPU cores) +- `--timeout 120` - Worker timeout in seconds (adjust based on your needs) +- `--access-logfile` - Path for access logs +- `--error-logfile` - Path for error logs +- `--log-level` - Logging level (debug, info, warning, error, critical) + +### Running as a Systemd Service + +Create a systemd service file `/etc/systemd/system/text2trait-frontend.service`: + +```ini +[Unit] +Description=Text2Trait Frontend Application +After=network.target + +[Service] +Type=notify +User=www-data +Group=www-data +WorkingDirectory=/path/to/Text2Trait_devel +Environment="PATH=/path/to/venv/bin" +ExecStart=/path/to/venv/bin/gunicorn wsgi_t2tfe:server \ + --bind 0.0.0.0:8050 \ + --workers 4 \ + --timeout 120 \ + --access-logfile /var/log/text2trait/access.log \ + --error-logfile /var/log/text2trait/error.log +ExecReload=/bin/kill -s HUP $MAINPID +KillMode=mixed +TimeoutStopSec=5 +PrivateTmp=true + +[Install] +WantedBy=multi-user.target +``` + +Enable and start the service: + +```bash +sudo systemctl daemon-reload +sudo systemctl enable text2trait-frontend +sudo systemctl start text2trait-frontend +sudo systemctl status text2trait-frontend +``` + +### Using with Nginx (Reverse Proxy) + +Create an Nginx configuration `/etc/nginx/sites-available/text2trait`: + +```nginx +server { + listen 80; + server_name your-domain.com; + + location / { + proxy_pass http://127.0.0.1:8050; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # WebSocket support (if needed by Dash) + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + # Increase timeouts for long-running requests + proxy_connect_timeout 120s; + proxy_send_timeout 120s; + proxy_read_timeout 120s; + } +} +``` + +Enable the site: + +```bash +sudo ln -s /etc/nginx/sites-available/text2trait /etc/nginx/sites-enabled/ +sudo nginx -t +sudo systemctl reload nginx +``` + +## Environment Variables + +If your application requires environment variables, set them before running: + +```bash +export DATA_PATH=/path/to/data +export LOG_LEVEL=INFO +gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 4 +``` + +## Monitoring and Logs + +Monitor the application: + +```bash +# View logs +tail -f /var/log/text2trait/access.log +tail -f /var/log/text2trait/error.log + +# Check service status +sudo systemctl status text2trait-frontend + +# View systemd logs +sudo journalctl -u text2trait-frontend -f +``` + +## Performance Tuning + +### Worker Count + +The optimal number of workers depends on your server: + +- CPU-bound applications: `(2 × CPU cores) + 1` +- I/O-bound applications: `(4 × CPU cores) + 1` + +For the Dash application (mostly I/O-bound): + +```bash +# For a 4-core server: +gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 17 +``` + +### Worker Class + +For better async support, use the gevent worker class: + +```bash +pip install gevent +gunicorn wsgi_t2tfe:server \ + --bind 0.0.0.0:8050 \ + --workers 4 \ + --worker-class gevent \ + --worker-connections 1000 +``` + +## Troubleshooting + +### Application won't start + +1. Check Python path and dependencies: + ```bash + python -c "from wsgi_t2tfe import server; print('OK')" + ``` + +2. Check Gunicorn syntax: + ```bash + gunicorn --check-config wsgi_t2tfe:server + ``` + +3. Check logs for errors: + ```bash + tail -f /var/log/text2trait/error.log + ``` + +### High memory usage + +Reduce the number of workers: + +```bash +gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 2 +``` + +### Timeout errors + +Increase the timeout: + +```bash +gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --timeout 300 +``` + +## Security Considerations + +1. **Never expose Gunicorn directly to the internet** - Always use a reverse proxy like Nginx +2. **Use HTTPS** - Configure SSL/TLS in Nginx +3. **Firewall rules** - Restrict access to port 8050 to localhost only +4. **Keep dependencies updated** - Regularly update Python packages +5. **Use a dedicated user** - Don't run as root + +## Additional Resources + +- [Gunicorn Documentation](https://docs.gunicorn.org/) +- [Dash Deployment Guide](https://dash.plotly.com/deployment) +- [Nginx Documentation](https://nginx.org/en/docs/) From fbbda6bf0e58d5a556f397198ff3c825754dabaf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 09:38:21 +0000 Subject: [PATCH 05/16] Clarify directory name typo in comments Co-authored-by: MDSharma <7817786+MDSharma@users.noreply.github.com> --- DEPLOYMENT.md | 1 + wsgi_t2tfe.py | 1 + 2 files changed, 2 insertions(+) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 3a7ecef..6eba195 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -6,6 +6,7 @@ This guide explains how to deploy the Text2Trait frontend application using Guni 1. Python 3.12 or higher 2. Install dependencies from `text2trait_forntend_app/src/pyproject.toml`: + (Note: The directory name contains a typo 'forntend' - this is the actual name in the repository) ```bash cd text2trait_forntend_app/src pip install -r pyproject.toml diff --git a/wsgi_t2tfe.py b/wsgi_t2tfe.py index 466562b..7a48b0b 100644 --- a/wsgi_t2tfe.py +++ b/wsgi_t2tfe.py @@ -10,6 +10,7 @@ Environment Setup: 1. Install dependencies from text2trait_forntend_app/src/pyproject.toml + (Note: directory name has typo 'forntend' - this is intentional, matching repo structure) 2. Ensure all data files are in place 3. Set appropriate environment variables if needed From affc966bc6542e4fc8efdbad99cecfe51702ab90 Mon Sep 17 00:00:00 2001 From: MD Sharma <7817786+MDSharma@users.noreply.github.com> Date: Mon, 3 Nov 2025 09:53:04 +0000 Subject: [PATCH 06/16] Change Gunicorn bind address to localhost Updated Gunicorn configuration to bind to localhost instead of all interfaces. --- DEPLOYMENT.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 6eba195..925c468 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -47,7 +47,7 @@ gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 4 ```bash gunicorn wsgi_t2tfe:server \ - --bind 0.0.0.0:8050 \ + --bind 127.0.0.1:8050 \ --workers 4 \ --timeout 120 \ --access-logfile /var/log/text2trait/access.log \ @@ -57,7 +57,7 @@ gunicorn wsgi_t2tfe:server \ #### Configuration Options Explained -- `--bind 0.0.0.0:8050` - Bind to all interfaces on port 8050 +- `--bind 127.0.0.1:8050` - Bind only to localhost on port 8050 - `--workers 4` - Use 4 worker processes (adjust based on CPU cores: 2-4 × CPU cores) - `--timeout 120` - Worker timeout in seconds (adjust based on your needs) - `--access-logfile` - Path for access logs @@ -74,13 +74,13 @@ Description=Text2Trait Frontend Application After=network.target [Service] -Type=notify +Type=simple User=www-data Group=www-data -WorkingDirectory=/path/to/Text2Trait_devel +WorkingDirectory=/path/to/Text2Trait Environment="PATH=/path/to/venv/bin" ExecStart=/path/to/venv/bin/gunicorn wsgi_t2tfe:server \ - --bind 0.0.0.0:8050 \ + --bind 127.0.0.1:8050 \ --workers 4 \ --timeout 120 \ --access-logfile /var/log/text2trait/access.log \ @@ -147,7 +147,7 @@ If your application requires environment variables, set them before running: ```bash export DATA_PATH=/path/to/data export LOG_LEVEL=INFO -gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 4 +gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --workers 4 ``` ## Monitoring and Logs @@ -179,7 +179,7 @@ For the Dash application (mostly I/O-bound): ```bash # For a 4-core server: -gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 17 +gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --workers 17 ``` ### Worker Class @@ -189,7 +189,7 @@ For better async support, use the gevent worker class: ```bash pip install gevent gunicorn wsgi_t2tfe:server \ - --bind 0.0.0.0:8050 \ + --bind 127.0.0.1:8050 \ --workers 4 \ --worker-class gevent \ --worker-connections 1000 @@ -219,7 +219,7 @@ gunicorn wsgi_t2tfe:server \ Reduce the number of workers: ```bash -gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 2 +gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --workers 2 ``` ### Timeout errors @@ -227,7 +227,7 @@ gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 2 Increase the timeout: ```bash -gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --timeout 300 +gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --timeout 300 ``` ## Security Considerations From ab5d003975effcb17bb5a2d372330e53f5158dc7 Mon Sep 17 00:00:00 2001 From: MD Sharma <7817786+MDSharma@users.noreply.github.com> Date: Mon, 3 Nov 2025 09:53:59 +0000 Subject: [PATCH 07/16] Change bind address from 0.0.0.0 to 127.0.0.1 --- wsgi_t2tfe.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wsgi_t2tfe.py b/wsgi_t2tfe.py index 7a48b0b..351360b 100644 --- a/wsgi_t2tfe.py +++ b/wsgi_t2tfe.py @@ -6,7 +6,7 @@ frontend Dash application. Usage with Gunicorn: - gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 4 + gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --workers 4 Environment Setup: 1. Install dependencies from text2trait_forntend_app/src/pyproject.toml @@ -36,4 +36,4 @@ # For local testing only if __name__ == "__main__": - app.run(host="0.0.0.0", port=8050, debug=False) + app.run(host="127.0.0.1", port=8050, debug=False) From 154b17dd66e7dfbd6aaee2802bff2679962a4d97 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 09:59:06 +0000 Subject: [PATCH 08/16] Initial plan From 27344d23f3156662ccd934d75c9f9d5b0243f027 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 10:04:00 +0000 Subject: [PATCH 09/16] Replace GWAS-P with Text2Trait in frontend and documentation Co-authored-by: MDSharma <7817786+MDSharma@users.noreply.github.com> --- text2trait_forntend_app/src/pages/home.py | 10 +++++----- text2trait_forntend_app/src/pages/index.py | 6 +++--- text2trait_forntend_app/src/pages/questions.py | 6 +++--- text2trait_forntend_app/src/pages/results.py | 8 ++++---- text2trait_forntend_app/src/pyproject.toml | 2 +- utils/data_processing/main.py | 2 +- wsgi_t2tfe.py | 2 +- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/text2trait_forntend_app/src/pages/home.py b/text2trait_forntend_app/src/pages/home.py index 21cfdd0..3f2080a 100644 --- a/text2trait_forntend_app/src/pages/home.py +++ b/text2trait_forntend_app/src/pages/home.py @@ -1,8 +1,8 @@ """ -Home Page – GWAS-P ------------------- +Home Page – Text2Trait +---------------------- -This is the landing page for the GWAS-P application. +This is the landing page for the Text2Trait application. It provides: - An introductory description of the app. - Search inputs for traits and (optionally) specific genes. @@ -22,7 +22,7 @@ __name__, path="/", name="Home", - title="GWAS-P", + title="Text2Trait", ) @@ -38,7 +38,7 @@ [ html.Img( src=dash.get_asset_url("text2trait_logo.png"), - alt="GWAS-P logo", + alt="Text2Trait logo", style={ "width": "200px", "height": "200px", diff --git a/text2trait_forntend_app/src/pages/index.py b/text2trait_forntend_app/src/pages/index.py index 8151b0d..c6b0b6e 100644 --- a/text2trait_forntend_app/src/pages/index.py +++ b/text2trait_forntend_app/src/pages/index.py @@ -1,6 +1,6 @@ """ -Index Page – GWAS-P -------------------- +Index Page – Text2Trait +------------------------ This page provides a browsable index of: - All traits in the knowledge graph. @@ -186,7 +186,7 @@ def generate_trait_gene_tab() -> dash_table.DataTable: # Page Layout # ─────────────────────────────── layout = dbc.Container([ - html.H2("GWAS-P Knowledge Graph Explorer", className="my-4"), + html.H2("Text2Trait Knowledge Graph Explorer", className="my-4"), dbc.Row([ dbc.Col([ dbc.Tabs([ diff --git a/text2trait_forntend_app/src/pages/questions.py b/text2trait_forntend_app/src/pages/questions.py index b3f0770..94c55e7 100644 --- a/text2trait_forntend_app/src/pages/questions.py +++ b/text2trait_forntend_app/src/pages/questions.py @@ -1,9 +1,9 @@ """ -Questions Page – GWAS-P ------------------------ +Questions Page – Text2Trait +---------------------------- This page contains an FAQ section for common user questions -about the GWAS-P application. +about the Text2Trait application. """ import dash diff --git a/text2trait_forntend_app/src/pages/results.py b/text2trait_forntend_app/src/pages/results.py index 8cc6503..e190b6f 100644 --- a/text2trait_forntend_app/src/pages/results.py +++ b/text2trait_forntend_app/src/pages/results.py @@ -1,8 +1,8 @@ """ -Results Page – GWAS-P ----------------------- +Results Page – Text2Trait +-------------------------- -This page displays the GWAS-P results, including a trait-gene interaction +This page displays the Text2Trait results, including a trait-gene interaction graph using Cytoscape, interactive tables for matched genes, and a side panel for detailed gene information retrieved from NCBI. """ @@ -41,7 +41,7 @@ __name__, path="/results", name="Results", - title="GWAS-P Results" + title="Text2Trait Results" ) # ─────────────────────────────── diff --git a/text2trait_forntend_app/src/pyproject.toml b/text2trait_forntend_app/src/pyproject.toml index 39b5351..4e9dbbb 100644 --- a/text2trait_forntend_app/src/pyproject.toml +++ b/text2trait_forntend_app/src/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "gwas-frontend-project" +name = "text2trait-frontend-project" version = "0.1.0" description = "Requirments for the frontend" authors = [ diff --git a/utils/data_processing/main.py b/utils/data_processing/main.py index 8d5b2fd..7b0278e 100644 --- a/utils/data_processing/main.py +++ b/utils/data_processing/main.py @@ -1,5 +1,5 @@ """ -Main pipeline script for processing GWAS and literature data. +Main pipeline script for processing Text2Trait and literature data. Workflow: 1. Process Excel files → master_triplets.jsonl diff --git a/wsgi_t2tfe.py b/wsgi_t2tfe.py index 351360b..eafc204 100644 --- a/wsgi_t2tfe.py +++ b/wsgi_t2tfe.py @@ -16,7 +16,7 @@ The application is a Dash-based frontend that provides: - Multi-page navigation - - GWAS data visualization + - Text2Trait data visualization - Interactive search functionality - Results visualization with Cytoscape graphs """ From 7e6bcf65d3d5c9769c8ef488aa26645119978b27 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 10:05:57 +0000 Subject: [PATCH 10/16] Fix typo: Requirments -> Requirements in pyproject.toml Co-authored-by: MDSharma <7817786+MDSharma@users.noreply.github.com> --- text2trait_forntend_app/src/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text2trait_forntend_app/src/pyproject.toml b/text2trait_forntend_app/src/pyproject.toml index 4e9dbbb..9df74ef 100644 --- a/text2trait_forntend_app/src/pyproject.toml +++ b/text2trait_forntend_app/src/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "text2trait-frontend-project" version = "0.1.0" -description = "Requirments for the frontend" +description = "Requirements for the frontend" authors = [ ] readme = "README.md" From fbcc5468965b13cc0473000647b262ed7750f5db Mon Sep 17 00:00:00 2001 From: MD Sharma <7817786+MDSharma@users.noreply.github.com> Date: Mon, 3 Nov 2025 10:30:19 +0000 Subject: [PATCH 11/16] Change local server port from 8050 to 8051 --- wsgi_t2tfe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wsgi_t2tfe.py b/wsgi_t2tfe.py index eafc204..7275916 100644 --- a/wsgi_t2tfe.py +++ b/wsgi_t2tfe.py @@ -36,4 +36,4 @@ # For local testing only if __name__ == "__main__": - app.run(host="127.0.0.1", port=8050, debug=False) + app.run(host="127.0.0.1", port=8051, debug=False) From 6eb8a176d93bb69209f575cbdf1a001028397c67 Mon Sep 17 00:00:00 2001 From: MD Sharma <7817786+MDSharma@users.noreply.github.com> Date: Mon, 3 Nov 2025 10:31:13 +0000 Subject: [PATCH 12/16] Change app host to 127.0.0.1 and port to 8051 --- text2trait_forntend_app/src/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text2trait_forntend_app/src/app.py b/text2trait_forntend_app/src/app.py index b38a243..fca5c51 100644 --- a/text2trait_forntend_app/src/app.py +++ b/text2trait_forntend_app/src/app.py @@ -123,4 +123,4 @@ # Application Entry Point # ─────────────────────────────── if __name__ == "__main__": - app.run(host="0.0.0.0", port=8050, debug=False) \ No newline at end of file + app.run(host="127.0.0.1", port=8051, debug=False) From 6fe7bb3efaf9dbf0f395087f4cbe6c2fb59050ff Mon Sep 17 00:00:00 2001 From: MD Sharma <7817786+MDSharma@users.noreply.github.com> Date: Mon, 3 Nov 2025 11:27:45 +0000 Subject: [PATCH 13/16] Set package-mode to false in pyproject.toml --- text2trait_forntend_app/src/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/text2trait_forntend_app/src/pyproject.toml b/text2trait_forntend_app/src/pyproject.toml index 9df74ef..184d89d 100644 --- a/text2trait_forntend_app/src/pyproject.toml +++ b/text2trait_forntend_app/src/pyproject.toml @@ -21,3 +21,4 @@ dependencies = [ [build-system] requires = ["poetry-core>=2.0.0,<3.0.0"] build-backend = "poetry.core.masonry.api" +package-mode = false From 85f614647d3e8120578e4701b6547fc5d0ba1b11 Mon Sep 17 00:00:00 2001 From: MD Sharma <7817786+MDSharma@users.noreply.github.com> Date: Mon, 3 Nov 2025 11:29:51 +0000 Subject: [PATCH 14/16] Add requirements for Python 3.12 to 3.14 Added dependencies for Python 3.12 to 3.14 compatibility. --- .../src/utils/requirements.txt | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 text2trait_forntend_app/src/utils/requirements.txt diff --git a/text2trait_forntend_app/src/utils/requirements.txt b/text2trait_forntend_app/src/utils/requirements.txt new file mode 100644 index 0000000..4dd2210 --- /dev/null +++ b/text2trait_forntend_app/src/utils/requirements.txt @@ -0,0 +1,46 @@ +anyio==4.11.0 ; python_version >= "3.12" and python_version < "3.14" +bio==1.8.1 ; python_version >= "3.12" and python_version < "3.14" +biopython==1.86 ; python_version >= "3.12" and python_version < "3.14" +biothings-client==0.4.1 ; python_version >= "3.12" and python_version < "3.14" +blinker==1.9.0 ; python_version >= "3.12" and python_version < "3.14" +certifi==2025.10.5 ; python_version >= "3.12" and python_version < "3.14" +charset-normalizer==3.4.4 ; python_version >= "3.12" and python_version < "3.14" +click==8.3.0 ; python_version >= "3.12" and python_version < "3.14" +colorama==0.4.6 ; python_version >= "3.12" and python_version < "3.14" and platform_system == "Windows" +dash-bootstrap-components==2.0.4 ; python_version >= "3.12" and python_version < "3.14" +dash-cytoscape==1.0.2 ; python_version >= "3.12" and python_version < "3.14" +dash==3.2.0 ; python_version >= "3.12" and python_version < "3.14" +flask==3.1.2 ; python_version >= "3.12" and python_version < "3.14" +gprofiler-official==1.0.0 ; python_version >= "3.12" and python_version < "3.14" +h11==0.16.0 ; python_version >= "3.12" and python_version < "3.14" +httpcore==1.0.9 ; python_version >= "3.12" and python_version < "3.14" +httpx==0.28.1 ; python_version >= "3.12" and python_version < "3.14" +idna==3.11 ; python_version >= "3.12" and python_version < "3.14" +importlib-metadata==8.7.0 ; python_version >= "3.12" and python_version < "3.14" +itsdangerous==2.2.0 ; python_version >= "3.12" and python_version < "3.14" +jinja2==3.1.6 ; python_version >= "3.12" and python_version < "3.14" +markupsafe==3.0.3 ; python_version >= "3.12" and python_version < "3.14" +mygene==3.2.2 ; python_version >= "3.12" and python_version < "3.14" +narwhals==2.10.1 ; python_version >= "3.12" and python_version < "3.14" +nest-asyncio==1.6.0 ; python_version >= "3.12" and python_version < "3.14" +networkx==3.5 ; python_version >= "3.12" and python_version < "3.14" +numpy==2.3.4 ; python_version >= "3.12" and python_version < "3.14" +packaging==25.0 ; python_version >= "3.12" and python_version < "3.14" +pandas==2.3.3 ; python_version >= "3.12" and python_version < "3.14" +platformdirs==4.5.0 ; python_version >= "3.12" and python_version < "3.14" +plotly==6.3.1 ; python_version >= "3.12" and python_version < "3.14" +pooch==1.8.2 ; python_version >= "3.12" and python_version < "3.14" +python-dateutil==2.9.0.post0 ; python_version >= "3.12" and python_version < "3.14" +pytz==2025.2 ; python_version >= "3.12" and python_version < "3.14" +rapidfuzz==3.14.3 ; python_version >= "3.12" and python_version < "3.14" +requests==2.32.5 ; python_version >= "3.12" and python_version < "3.14" +retrying==1.4.2 ; python_version >= "3.12" and python_version < "3.14" +setuptools==80.9.0 ; python_version >= "3.12" and python_version < "3.14" +six==1.17.0 ; python_version >= "3.12" and python_version < "3.14" +sniffio==1.3.1 ; python_version >= "3.12" and python_version < "3.14" +tqdm==4.67.1 ; python_version >= "3.12" and python_version < "3.14" +typing-extensions==4.15.0 ; python_version >= "3.12" and python_version < "3.14" +tzdata==2025.2 ; python_version >= "3.12" and python_version < "3.14" +urllib3==2.5.0 ; python_version >= "3.12" and python_version < "3.14" +werkzeug==3.1.3 ; python_version >= "3.12" and python_version < "3.14" +zipp==3.23.0 ; python_version >= "3.12" and python_version < "3.14" From f19b27b2c30b3d5a7ce90cc8540618eab459c6b3 Mon Sep 17 00:00:00 2001 From: MD Sharma <7817786+MDSharma@users.noreply.github.com> Date: Mon, 3 Nov 2025 11:40:35 +0000 Subject: [PATCH 15/16] Change application port and user for deployment Updated deployment instructions to reflect new port and user settings. --- DEPLOYMENT.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 925c468..dc462de 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -33,21 +33,21 @@ For local development and testing: python wsgi_t2tfe.py ``` -The application will be available at `http://localhost:8050/` +The application will be available at `http://localhost:8051/` ### Production Deployment with Gunicorn For production deployment, use Gunicorn: ```bash -gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8050 --workers 4 +gunicorn wsgi_t2tfe:server --bind 0.0.0.0:8051 --workers 4 ``` #### Recommended Gunicorn Configuration ```bash gunicorn wsgi_t2tfe:server \ - --bind 127.0.0.1:8050 \ + --bind 127.0.0.1:8051 \ --workers 4 \ --timeout 120 \ --access-logfile /var/log/text2trait/access.log \ @@ -75,8 +75,8 @@ After=network.target [Service] Type=simple -User=www-data -Group=www-data +User=harvest +Group=harvest WorkingDirectory=/path/to/Text2Trait Environment="PATH=/path/to/venv/bin" ExecStart=/path/to/venv/bin/gunicorn wsgi_t2tfe:server \ From 7171fe4e3c3e16708689093ccc044038957f558a Mon Sep 17 00:00:00 2001 From: MD Sharma <7817786+MDSharma@users.noreply.github.com> Date: Mon, 3 Nov 2025 11:53:59 +0000 Subject: [PATCH 16/16] Change Gunicorn bind port from 8050 to 8051 --- DEPLOYMENT.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index dc462de..8a18bdc 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -57,7 +57,7 @@ gunicorn wsgi_t2tfe:server \ #### Configuration Options Explained -- `--bind 127.0.0.1:8050` - Bind only to localhost on port 8050 +- `--bind 127.0.0.1:8051` - Bind only to localhost on port 8051 - `--workers 4` - Use 4 worker processes (adjust based on CPU cores: 2-4 × CPU cores) - `--timeout 120` - Worker timeout in seconds (adjust based on your needs) - `--access-logfile` - Path for access logs @@ -80,7 +80,7 @@ Group=harvest WorkingDirectory=/path/to/Text2Trait Environment="PATH=/path/to/venv/bin" ExecStart=/path/to/venv/bin/gunicorn wsgi_t2tfe:server \ - --bind 127.0.0.1:8050 \ + --bind 127.0.0.1:8051 \ --workers 4 \ --timeout 120 \ --access-logfile /var/log/text2trait/access.log \ @@ -113,7 +113,7 @@ server { server_name your-domain.com; location / { - proxy_pass http://127.0.0.1:8050; + proxy_pass http://127.0.0.1:8051; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -147,7 +147,7 @@ If your application requires environment variables, set them before running: ```bash export DATA_PATH=/path/to/data export LOG_LEVEL=INFO -gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --workers 4 +gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8051 --workers 4 ``` ## Monitoring and Logs @@ -179,7 +179,7 @@ For the Dash application (mostly I/O-bound): ```bash # For a 4-core server: -gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --workers 17 +gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8051 --workers 17 ``` ### Worker Class @@ -189,7 +189,7 @@ For better async support, use the gevent worker class: ```bash pip install gevent gunicorn wsgi_t2tfe:server \ - --bind 127.0.0.1:8050 \ + --bind 127.0.0.1:8051 \ --workers 4 \ --worker-class gevent \ --worker-connections 1000 @@ -219,7 +219,7 @@ gunicorn wsgi_t2tfe:server \ Reduce the number of workers: ```bash -gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --workers 2 +gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8051 --workers 2 ``` ### Timeout errors @@ -227,14 +227,14 @@ gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --workers 2 Increase the timeout: ```bash -gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8050 --timeout 300 +gunicorn wsgi_t2tfe:server --bind 127.0.0.1:8051 --timeout 300 ``` ## Security Considerations 1. **Never expose Gunicorn directly to the internet** - Always use a reverse proxy like Nginx 2. **Use HTTPS** - Configure SSL/TLS in Nginx -3. **Firewall rules** - Restrict access to port 8050 to localhost only +3. **Firewall rules** - Restrict access to port 8051 to localhost only 4. **Keep dependencies updated** - Regularly update Python packages 5. **Use a dedicated user** - Don't run as root