diff --git a/__pycache__/app.cpython-310.pyc b/__pycache__/app.cpython-310.pyc index 4a9e3fb1e481954853207d0777334d4770501a80..b9ce1e3aa29d92c195b48be313ba3b1c4dc13780 100644 GIT binary patch delta 113 zcmdnUag~ENpO=@50SGi6%uTsFkyn=S+eGd2a;cmPWEL`{a>mQ1Fr@J1$b~SZa;5NR zGZj^)axakI%*R;E$f&TnhslLeoF_fCB)%Xgu_P_ODEAfzj5YZ@vjL;QBo<9BE@lp9 K4kjK(mj3`-pCDiW delta 78 zcmcc0v5|u}pO=@50SIPIn3J+;BCjmtn~B=zMN$}2_;O@I7*e@X__LXcN>aHO$ZnQk htYu`B+dPfQg>mvHW_?Dz$x1Am92_hhOgxM%{{db76kPxS diff --git a/__pycache__/routes.cpython-310.pyc b/__pycache__/routes.cpython-310.pyc index ce6de8c860872bac923fc491c2f5d2b370df1c86..6fac0fe89d96480897f3f40d32a8cdfdffe49246 100644 GIT binary patch delta 337 zcmZ3^)Xt)v&&$ij00cj-&rO-h$iVOz#6bouK#l_t7Z**`HgaW1VaZ|3WshQKWJqPm zVohaFVNGG{Wdib8ni&>wq%tgIjN(jTNMX<6%H@vYhN|LD;ee=0;S6TbqH5i8KSx7aiDGE3rfa&PhG@ypKHDkiizwWv6zxJg`kf*;rCrZ58O#~=g`kf*;rCrhw?jAOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yY=ZXRDad;?$zz znBp?s^8BLgn1IUUjKrecfTH}Y)Z~)lm~5k>{QQ#m8EM1aX mTmqB;Q}OYcd6^~g@p=W7w>WHa^HWN5Qtd!i7Bc|}76t&q4>1e? literal 0 HcmV?d00001 diff --git a/components/k2test/k2test/__pycache__/views.cpython-310.pyc b/components/k2test/k2test/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21c5364adc870e83645799021ec8269990f9e4e4 GIT binary patch literal 1985 zcma)7&2Jnv6d!wLc4uclk~IBDKZF(}4lBB8*+fD@RRxrCKqV9c97aK->DWmo@yu*& zZ_}(c2WYQ7aHdEpxBLP8A1xOoUpXMoy&xn$-t%OeLBoaryMY)j`@knuL zTIooFAzjUyuu_hWCY?$RZGlE$_pSsgDze-t}J&C9eEj$ zKfk*5?%J2=c}?B#@0N0V?e1Q>naKREEVrQKYHfQU%TmXw;7M^bSxd`&SQb!ST*g{V zyZag6Rg1$t6W$P+(x`WH9{eag%N1w*IwU`SxqI=3DAPo!n=qJa_d-Lr2POnY@j_)~ zp$ujBOpO;nEpF;*SrkY`4>@P*`~go#$kBDKA#NdL2Rs>{jq;)D)npfE;n60rW_%#9 z1P)2AMgq)0E>zS+mcbzu#? zzG#6!uZ(7uXLkjNk?3UH7$zIM3+9&&iG(-rRs1huOfN9l7M0hbtNbtjuYcJGrJlPY z7g718%Vl{D=C5$z|Ja;YU#i*aKJS+Mc+;(-!HC`aRGhk2ua?h2^uum?5FhRPR2?h_Q z#NdGrn5`4pu}lb$gL)H|)hvj>tC4^Pg#PXQ<^AI|rQ*=%Lz_$2UqDEl;4s`k)dt(Cs%q0zbrTni>^O2v1zf6aGIbX@YioB6^ai{D zC%Ewrh$9kx2ImEM4{l5-qA=QTXTH&=o!OZmx2}J5$gUCY5;oW5A4@292`S+w;Thq> z6~~d}?+|`ce1rV$t8`89H3ZOz5*;gTg-1(N?UA&&G|p7lFL7>JykLi@jjR=iX`Vfa zMg<&3`7F*RZjMc@ElW))7i_;R4J&F6Q5wd{UN|1-(QM{Uvx1E@3QI4rv9QP?@Pa<` zwwS*KexGmlH@v>*k&xy1O0FyY(LImCoTV8XhwwP#X}s|wn?!CRjAexu%2dMEn!~}< zB!NkoMzHf=>0OelvZdc~K=qff0>yHjft@7Tt7Na%<*qxeS}iJeQ0t}Ppqk&*41)n& zgv0v^?hV0zFmTg2jV@>6_dIu0D~pP{I%}ww#W(h0QwgaCFh3RApdGgMgl%8y*4>|= zW|5lL3#m#D+sD$nk5Hke5z#QuIP8mKtRU$5bX=$V+?{t{yDzYMw|d{5uimacb>F*h Qln9&xjfM5@;9_^b0Etthvj6}9 literal 0 HcmV?d00001 diff --git a/components/k2test/k2test/languages/en/LC_MESSAGES/messages.po b/components/k2test/k2test/languages/en/LC_MESSAGES/messages.po new file mode 100644 index 0000000..cf76e83 --- /dev/null +++ b/components/k2test/k2test/languages/en/LC_MESSAGES/messages.po @@ -0,0 +1,4 @@ +msgid "New 2 page" +msgstr "Нова сторінка 2" +msgid "title_menu_items" +msgstr "Test menu items" \ No newline at end of file diff --git a/components/k2test/k2test/languages/uk/LC_MESSAGES/messages.mo b/components/k2test/k2test/languages/uk/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..e8acc2ec1399025fd89b8a958e2e07e64fde3c80 GIT binary patch literal 643 zcmY*W&2G~`5H>$2pHQ!G7=);(sts!=swyWAO%oS_>^O2l1ze(SvNfj8I$E!RN<9GY z05>i?L50){BH+(Oh!=O6LWHW2~h2I48= z#}&g!P~SwfuNuZ3)FaeJkG}>RW-R80N>s{6Q!a{8qWCm7`Z9aT$BJ|(aSctNY{@3lIe$QumIemEp;$(h0%NQWuz zfKBZxp*zId0juiNs@t?mDH2Jbe$eZbE6&+pcB71E7F(^qa2z=cwV)NE%$ae@7v&hXWWzft#RDN95h#xI!6xpE72Om;7M>ee`e8>ftIBfiuQwR3h5l_LcSh!3>f6@#6MW4g+-SWL&EZ;6a>bd@k0o%}@ Y^~E~8VqkQkzv=I|&-I0#Bmdm^1-A9Zg#Z8m literal 0 HcmV?d00001 diff --git a/components/k2test/k2test/languages/uk/LC_MESSAGES/messages.po b/components/k2test/k2test/languages/uk/LC_MESSAGES/messages.po new file mode 100644 index 0000000..397ef8f --- /dev/null +++ b/components/k2test/k2test/languages/uk/LC_MESSAGES/messages.po @@ -0,0 +1,4 @@ +msgid "New 2 page" +msgstr "Нова сторінка 2" +msgid "title_menu_items" +msgstr "Тестова компонента" \ No newline at end of file diff --git a/components/k2test/k2test/templates/new2.html b/components/k2test/k2test/templates/new2.html new file mode 100644 index 0000000..f3fbd57 --- /dev/null +++ b/components/k2test/k2test/templates/new2.html @@ -0,0 +1,3 @@ + + +

{{ _('New 2 page') }}

\ No newline at end of file diff --git a/components/k2test/k2test/views.py b/components/k2test/k2test/views.py new file mode 100644 index 0000000..fcf569d --- /dev/null +++ b/components/k2test/k2test/views.py @@ -0,0 +1,51 @@ +from flask import render_template, redirect, request, jsonify +from flask_babel import gettext +from flask_login import login_user, current_user, logout_user, login_required +from flask import current_app as k2 +from flask import Blueprint, json +from flask_sqlalchemy import SQLAlchemy + + +#bliueprint +k2test = Blueprint('k2test', __name__, template_folder='templates', static_folder='static') + +#component routes +@k2test.route('/new') +def new_component(): + db = k2.extensions['sqlalchemy'].db + connection = db.engine.connect() + query = db.text("SELECT email, login FROM k2users") + result = connection.execute(query).fetchall() + rows = [dict(email=row.email, login=row.login) for row in result] + # Перетворення результату на JSON + json_result = json.dumps(rows) + return json_result + +@k2test.route('/new2') +def new_component2(): + return render_template('new2.html') + +@k2test.route('/new3') +def new_component3(): + return jsonify({'data': 'page new3'}) + +@k2test.route('/new4') +def new_component4(): + return jsonify({'data': 'page new4'}) + +# menu items for admin +@k2test.route('/menu-admin-items') +def menu_items(): + data = [ + { + 'title': f"{gettext('title_menu_items')}", + 'icon': {'icon': 'mdi-chart-timeline-variant'}, + 'children': [ + {'title': 'Тест 3', 'to': 'k2test-new3'}, + {'title': 'Тест 3', 'to': 'k2test-new4'}, + ], + } + + ] + return data + diff --git a/components/k2test/reguirments-components.txt b/components/k2test/reguirments-components.txt new file mode 100644 index 0000000..6a2c957 --- /dev/null +++ b/components/k2test/reguirments-components.txt @@ -0,0 +1 @@ +grid==1.0.1 \ No newline at end of file diff --git a/components/k2test/requirements.txt b/components/k2test/requirements.txt new file mode 100644 index 0000000..b1a7563 --- /dev/null +++ b/components/k2test/requirements.txt @@ -0,0 +1 @@ +Flask-Login==0.6.2 diff --git a/components/k2test/setup.py b/components/k2test/setup.py new file mode 100644 index 0000000..5755e74 --- /dev/null +++ b/components/k2test/setup.py @@ -0,0 +1,15 @@ +from setuptools import setup, find_packages + +setup( + name='k2test', + version='1.0.0.8', + description='Description of my project version 1.0.0.8', + author='k2 cloud', + author_email='rs@corp2.net', + keywords="k2test, k2", + python_requires=">=3.7, <=3.11.2", + packages=['k2test'], + package_data={ # Optional + }, + install_requires=[""], +) diff --git a/db/database.db b/db/database.db index 3a11bb1c6dd0bd797d4ee47b0a1fb0e29ce0b363..0fbb088f306a1267199dffb0a3ab9387015297f9 100644 GIT binary patch delta 296 zcmZozz|^pSX@WGPD$Kr&gdEAlz`&qF$ofSE3II3#PfGv* delta 371 zcmZozz|^pSX@WGP=|mZ4M$?T63+4G4fIxtOfuEbtj@N|y-)2F93a-r^T9wR`&*?en zpY;{Dm*#ckX!N&8F|bTDOGz_JGD$SCOii>jPfAKjv@kL?PBlw5Gd9jPN=(U}Y^N{l zZKP*nWME{hYhb2pWT9YWXk}<*Wn!XdVQFAuVw6^tpR16ZpIeZhmzq~ntOwQxCCf5X z%Zn89aHV|5fti*n)%ic-@uD{R&E!BXm)K!<|GlN!HlR!q76= zG{qn-(by!>$Rg1^*}}*?G1W9N$-=170aZfYWdbTvA!O;I0tEmS31zYX diff --git a/k2/__pycache__/k2admmenu.cpython-310.pyc b/k2/__pycache__/k2admmenu.cpython-310.pyc index 0f4ca8a40872b27a9131906a2655164063f3f2a4..273ea0e8a650de6bd5d29b5b643ad56e0888e53d 100644 GIT binary patch delta 517 zcmZ9IIZFdU6vt;avy*jmXdwaDXbi;2f(ME5!gyanydZ^z7r{}9M-oRxi=+_s1IQ~< z3AUDE>qqbtEZA8Kscb}?x1xmu@5g`MfBwU~sW!b>!D1j_614_j?}X)l4Eh<}gl5)0 zbE@xi;W^M`L@=RWld@-;T+s?Evn+8vuDmYc{qG5qCAP7Y3sXW&$gwskG5&PPB6QZ# z7xIO(i*4onElnw=Dy!~x{pfCNWa1Z)bzO7jmI(D2vMG{ zbG)nhf+(J!z`ec_m(kzDZbF7}8&gQAa#I$uy|BgO_0pqSj!`UNyHSQ8=ieFt#c@G{vTMV+_^GJrQpLi+=I$CWB{!O f1xG(fZtw27Bf1Z9^u?msIh6R{G6Ok(AMN}G8~9;+ delta 286 zcmX>jHC>V~pO=@50SGusXQdQ!Z{*`)VKkX6&7vxj!kog=!cfEP!qCiE%TmJ<%%I7- zxsJt$adInL0Hfw)0X8)*U7*HdCLkd-*@4Z5Nt1Q*Z#K2b2JA5cJU~GvCMFh+KVocr zj4X_km$An(s!V3#c*3Z=`6b76CPtUZjogZiUXvGdYpUo0RTt@l2m=sd2qIKKgb|1^ z1`%$PKXA)4nobtrvCy;t30Q&%D-dA~B5Xi}Er_rK5%wTLYjPovETi+}ejW){7odQ_ qPLkedqOEYtn zz{GWVjE5%6GHw)0l}?dKk!@jUW{gs5XJBE7QVwR&l$(5m(SX;|NYBvBLeI!R&&bGf zvnbO}_WEQ-kR4FK1f)UO8HkHTfJ6zy0>*_5wTv~4H4O0#H4Iq{!3;%wKnYEzTO0*B zi6v?IMY*@wiYtptQgbz#ill*3Q3Ck|sYQt;nR)5)5Q!p?Q4m5D$hyUoo>~$Q(XCRH z8wC_9W&;u&Ol*v7j8**EMtTSZMY)E7ChJdT delta 172 zcmX>q*&xB2&&$ij00gX)=A;-;gKzqJEkX8ma`W4n#-*iCY{tx%nxj PIjMFamBmazLWltX&`=$D delta 117 zcmZ3$GJ%CRpO=@50SIoNn3d8pk=LKmX=1F?#KoSB+!NorGDb}{X4K?d$xtK;R8k~5 zIiJy=QEl>mMs*7g#v(?bn4czuhAIH70uf?B;ueQZZhlH>PO2S9WibCu+B0V1pg%n%mL#u)iy{IkF5LBsYgb)ZMzL->fd}&J|E%ZZ!s+OJ^ zqQHl$-K+DTo!^`}XYQG~^Sg!1Cjz<3N>ig>-S5xy`t-R#BfNR8^B>>j8i#b-WSgz? zfF0pgJa|^0Y`52~Sat`mJ_V~V*=bj%x+c4L4X-_|O?LA-zK+_c-Ja^<>-mNm;Pq!2 z-^d$IYo}mxtK^u6bxXaj1gl%m)=2 zQl3LMJY#%V@tETA8~hf&Q}JOHVHZW%&G#r0SDquvGbyVw%J-^)Ta@e9R>9uFZ{=T? zjB2%$-^OpJTJBP#V`}sce&_Yk-HMJY`VD^9b-G8z!L7P8iNP%Ow~m=p7=0H5OJrZ->`AH9i>_N8+($?Q}nkxk6lA`}nZ-`8$Mli8#*mCm#$@_EZV zB669~S5{f9>I%(?^i*EhN0P_mksdePe2u|hu(9P~cmbblxpm1yAA$T5M#u`+NQ%>r zmI4mvPJlUbG@W-V^v>ds_!eYRS-QTpqKEJ*wfm1eNlJH zQ)Wr$UV6&T>Y(w81KNb9GWaONeM|o(Mfv|pai2F< zMN2!+4rpHOUX9bp31edK^*_hpm}XUuuazB0W_j*dq3EBtv-3R@hea~)6hwn8OipY zt;MFjLgYj!nJqYpbUK-x34IYYV>^YRkX0!vDAk%TpH4VOaw3C;)&alxF){HS63c_n zx84R%;c{0k8e8gmM}fAjjYgPmLOlzD9|8~rZ@GExD?Jv_8^CvxeJ);gd$&9b@Kb!Z zEdsCLXKnlFq>n|yZ~=3X;eeMS`N(v#!Y}ZZ$ZK9+KA~AAKHh!>PGZs;z@J+#cro44 zX|<4-_@$IE$yzOyCO22@te%KKU$O9)+r~`Kd`#bFo z+(Rk6V%XM$vt?f^B|ZQ?&_zLeE(jU=Eo)T@r zSy>@-9G9CK+$RRofUPyv{RYjSAS=|9%xER;kZ%!6kkZH?3Fp{RHlYc*Nfr~ks1eJU zt!f+{XEcXQtJjJ(bnneh=MsW<(=8aCbuwwo5Yy86pp-jF)@r`IQl{o@QApB>-#j=3 zWq5F~89v5igPrX%4byArb!({pat91%KphxflTKuS_Q40<&&5@|Ja_{Brq1u=P+ir2 zxfb~%rtW9r6I>kn9(;uLv9_E3O3>29+ti3prMx3Wrm;YLr~>3-6)=Shv5mgJOFSxm zfX~Ff4KHKo@GKKQ!6$}O@fYN*SEXE#@@pxVrMxBO11VReyf5Xdlux9{fTBfZxji0$ ahw$FG1wLGkk5||E!i@IU*QC@Jfd2p&=saxz delta 1756 zcmZ9Mdu$X{6o==`On0~2cH3@g>5Fb@xBKY6U|VSEZVR+1A}#W$F=>znxMOLd+h#gc zDBD&-V+C6hJSG|t?M4zcK_Z#pBfK$DFa{Hi{!x%?(Q_}RG3@02?(BEY zJ@?#m&+g@s@Af$Qva;+FeFl!b#!hcPQqJZJ%R+6`I~8UXDPWb%El^bBq>6}#c?GEv#7D%>ss*VPBtRs{LV_$3 zBupg276`IfkcC8|tVWPJkw)!o;)~egF=>=CuNSU$`2-hXTwPDsZ#^QoE2;Ml$ zo7hspVqPUYU0Rrtv@-%g+v$@6>m6_Uqa+-MbpSks-I&Z^yf3^UbL1PZ@4vpkf?OpjokU zRHeR8qtU|qe#0M z`PpbFGzPBXE#K)vL!FZO@#$dcN9mBm7G|eoWZ-fCbr{9{)pdn`6+|AiOXQ(;xlnC_ z6^%e3+(iNP3N9D9RFX{R=~{2!pw`K>el5YY#MW+YppPG*0xt*Vt4>e>Zv|rbtWrH*xO`0F zx8U+nF?8WmA-82e-?tF=hUPxl_i!i%R`VOOLmtkA*A^e=%URN z&56i8fFJSsg?HeZX++xrB)n1+g>!hn=BHZyBn7z7w{p{qU2%Yo9u=HmhfG!(yUx`7T^YczxbTPLaX=?*K-ixt=sD~?97@}UXYS$%r>b~9n#IU_2Yoe z4f#2WzJ;81-qLy-3GQiV01Lj~;KJz!ucw@ltT<^er)&WW&wz561FFSNeWP;rkA55d zu@U$M-;Q~++hxj}|61%yrmWw^8?nQ13wOsoWp@br75yqr`mbER;KJ|Q5Bkq|HeLps z@Or$+Hp5YiehmMP9|RL88n@xS#;*Dk+?_Y6eum4ZTrP9@oXa&Xymb24TyAr@%Vh>% cZSv5c$@wNf-fU{i&9_y`R76{;P@4n(1?4*A4FCWD diff --git a/k2/k2admmenu.py b/k2/k2admmenu.py index a1cd578..90f1dad 100644 --- a/k2/k2admmenu.py +++ b/k2/k2admmenu.py @@ -42,8 +42,12 @@ class K2admin_menus(db.Model): WHERE prava.roleid = '{roleid}' """ result = db.session.execute(db.text(menu_query)).fetchall() - menu_items = [item[0].decode('utf-8') for item in result] - return menu_items + if k2.platform == 'Linux': + menu_items = [item[0] for item in result] + return menu_items + elif k2.platform == 'Windows': + menu_items = [item[0].decode('utf-8')for item in result] + return menu_items class K2admin_Menus_Prava(db.Model): __tablename__ = 'k2admin_menus_prava' diff --git a/k2/k2cfg.py b/k2/k2cfg.py index e607769..1b61e16 100644 --- a/k2/k2cfg.py +++ b/k2/k2cfg.py @@ -9,13 +9,13 @@ import os import sys from flask import session, request from flask_login import LoginManager - +import platform class k2(k2obj): version = '2.5.1.27' db = SQLAlchemy() domain = 'http://127.0.0.1:5000/' - update_domain = 'http://127.0.0.1:8000/' #'http://185.174.172.137/' + update_domain = 'http://192.168.20.229/' #'http://185.174.172.137/' venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') #for windows #venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/bin') #for linux json_sort_keys = False @@ -87,5 +87,12 @@ class k2(k2obj): def init_lm(self, app): # Initialize LoginManager self.login_manager.init_app(app) + @classmethod + def get_platform(cls): + operating_system = platform.system() + cls.platform = operating_system + return cls.platform + + diff --git a/k2/k2obj.py b/k2/k2obj.py index 99c0cfb..e9558df 100644 --- a/k2/k2obj.py +++ b/k2/k2obj.py @@ -18,7 +18,7 @@ class k2obj: } languages = '' components = '' - + platform = '' diff --git a/k2/k2rout.py b/k2/k2rout.py index 442cd38..1076e5d 100644 --- a/k2/k2rout.py +++ b/k2/k2rout.py @@ -17,6 +17,7 @@ from .k2admmenu import K2admin_menus, K2admin_Menus_Prava from sqlalchemy import text from flask_jwt_extended import get_jwt_identity, jwt_required from flask_login import login_user, current_user, logout_user, login_required +import platform # initialize db @@ -83,7 +84,7 @@ def home(): components = Component.query.all() components_names = [component.name for component in components] if 'k2site' in components_names: - return redirect(url_for('k2site.new_component2')) #змінити на ендпоінт головної k2site + return redirect(url_for('components.component_add_dasb')) #змінити на ендпоінт головної k2site else: return redirect('/dashboard') @@ -115,7 +116,7 @@ def dashboard(): components_names = [] components_names = [component.name for component in components] if 'k2site' in components_names: - return redirect(url_for('components.component_list_dasb')) # змінити на ендпоінт головної k2site + return redirect(url_for('components.home')) else: # Компоненти доступні для встановлення # GET-запит до API @@ -277,7 +278,7 @@ def install_component_from_archive(component_id): if component_name == 'k2grid_base': code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/')''' elif component_name == 'k2site': - code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/{selected_component['name']}')\nlogin_manager = k2().init_lm(app)''' + code = f'''login_manager = k2().init_lm(app)\nfrom components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/{selected_component['name']}')''' else: code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/{selected_component['name']}')''' @@ -322,28 +323,28 @@ def install_component_from_archive(component_id): @components_bp.route('/install-requirments/', methods=['GET']) def install_requirments(selected_component_name): - # menu items - get_admin_menu() - - - ## install requirements for windows - #venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') - #requirements_file = os.path.join('components', selected_component_name, "requirements.txt") - #if os.path.isfile(requirements_file): - # pip_command = f"{venv_bin_path}/python -m pip install -r {requirements_file}" - # subprocess.run(pip_command, shell=True, check=True) - - #install requirements for linux - venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/bin') - requirements_file = os.path.join('components', selected_component_name, "requirements.txt") - if os.path.isfile(requirements_file): - pip_command = f"{venv_bin_path}/python3 -m pip install -r {requirements_file}" - subprocess.run(pip_command, shell=True, check=True) - - return f'''Requirements installed successfully - \n \n please wait installing requirments components... - ''' + try: + if k2.platform == 'Windows': + # install requirements for windows + venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') + requirements_file = os.path.join('components', selected_component_name, "requirements.txt") + if os.path.isfile(requirements_file): + pip_command = f"{venv_bin_path}/python -m pip install -r {requirements_file}" + subprocess.run(pip_command, shell=True, check=True) + elif k2.platform == 'Linux': + #install requirements for linux + venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/bin') + requirements_file = os.path.join('components', selected_component_name, "requirements.txt") + if os.path.isfile(requirements_file): + pip_command = f"{venv_bin_path}/python3 -m pip install -r {requirements_file}" + subprocess.run(pip_command, shell=True, check=True) + + return f'''Requirements installed successfully + \n \n please wait installing requirments components... + ''' + except Exception as e: + return f'Error installing requirmets: {str(e)}' @components_bp.route('/install-requirments-components') def install_requirements_components(): @@ -386,7 +387,7 @@ def remove_dependencies(component_id): component.installed = False db.session.commit() - response = requests.get(f"{k2.domain}/k2site/new_component2") + return 'Component successfully turn off ' @@ -407,7 +408,7 @@ def add_dependencies(component_id): # Оновлюємо статус компоненти component.installed = True db.session.commit() - response = requests.get(f"{k2.domain}/k2site/new_component2") + return 'Dependencies added successfully ' @@ -435,7 +436,7 @@ def remove_component(component_id): except Exception as e: # Повертаємо повідомлення про помилку видалення return 'Error removing component: ' + str(e) - response = requests.get(f"{k2.domain}/k2site/new_component2") + # @components_bp.route('/component/add') @@ -515,7 +516,6 @@ def get_admin_menu(): filter_menu = [] response = requests.get(f"{k2.domain}api/add-to-menu") menu_items_list = K2admin_menus.get_menu_items_by_roles(role_id) - #print(menu_items_list) for item in response.json(): filtered_children = [] for im in item['children']: @@ -587,9 +587,10 @@ def component_add_dasb(): filtered_components = component_server components = Component.query.all() components_names = [component.name for component in components] + components_version = [{component.name: component.version} for component in components] return render_template('dashboard-add.html', - component_server=filtered_components, search_query=search_query, components_names=components_names ) + component_server=filtered_components, search_query=search_query, components_names=components_names, components_version=components_version ) diff --git a/languages/babel_translation_directories.yml b/languages/babel_translation_directories.yml index df5b863..d5a4dc3 100644 --- a/languages/babel_translation_directories.yml +++ b/languages/babel_translation_directories.yml @@ -1 +1 @@ -babel_translation_directories: languages;components/k2site/k2site/languages;components/k2adm/k2adm/languages;components/k2test/k2test/languages;components/k2grid_base/k2grid_base/languages +babel_translation_directories: languages;components/k2site/k2site/languages;components/k2test/k2test/languages diff --git a/routes.py b/routes.py index 00bd329..fe12535 100644 --- a/routes.py +++ b/routes.py @@ -4,3 +4,5 @@ from k2.k2rout import components_bp from k2.k2cfg import k2 app.register_blueprint(components_bp) #k2grid_base +from components.k2test.k2test.views import k2test +app.register_blueprint(k2test, url_prefix='/k2test') diff --git a/static/css/style.css b/static/css/style.css index 02a78be..992b116 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -60,4 +60,8 @@ a.btn.btn-primary { 100% { opacity: 0; } +} + +.update_avaible { +color: #eca80c; } \ No newline at end of file diff --git a/templates/dashboard-add.html b/templates/dashboard-add.html index daf6ded..a81a44e 100644 --- a/templates/dashboard-add.html +++ b/templates/dashboard-add.html @@ -51,6 +51,14 @@

{{ component.name|title }}

{{ component.description }}

version {{ component.latest_version }}

+ {% for component_upd_ver in components_version %} + {% for key, value in component_upd_ver.items() %} + {% if key == component.name and value < component.latest_version %} +

Update avaible

+ {% endif %} + {% endfor %} + {% endfor %} + {% if component.name in components_names %} {% else %} @@ -69,5 +77,4 @@ {% endblock %} -