diff --git a/__pycache__/main.cpython-310.pyc b/__pycache__/main.cpython-310.pyc index afe25d48f19177825b1a67df734283587b803d7a..4cb372a4b8c9bd43113c7b2a0327a78c12bfdc2c 100644 GIT binary patch delta 228 zcmaFQa)6aLpO=@50SKfgHKsI9nSO9`QD#9&@h#pkSHG}$ zCr`il0LKuI$!UyJ*(8B3Es~tf$mFG_1Y~kB@GycP2MZUY03#O|axif)0wF60qYxv@ Fe*g&cHfsO? delta 146 zcmX@W`ksY1pO=@50SG1()u(7r#kb{MbQGk&P2sxNI7=e(LgHec)br1%TzCFGy?<6Buiss!xZxrO9O+XM3cnHtMy&^EUiq;tW1scOiav; zj7=uj>556~WgC^G7MJLiWu}%FD`e&tq7 delta 245 zcmZozz|^pSX@WH4@rg3djK?=7tdwVO;BVk>;z`*oC=kN4IYnn1Q@y&RzavLuvWcOI zQHqI?fswIMs!6K3v89D^TC#acT3V`QO0uQ7Nw!f*YHRif`kRl3=)k^jFK!& z&CShB%!G`SEYgh9Oe~Tt%}kRmjS~&iCcEpq3Yb}$SXh~w=$Tmu&vXYuELEyS8gfX<=QbEY7KjY(z*z(J91>WQ@HhTfOU8dpMle z3@zWt!tjlLfGoBc^@A~fIKGf5VAPmQqZlxf1*3^yN&EvbhG6D%*E%uLd-Fc;?|$!d z&+|Ti-g|xGw@G2f>9jHU9C_;%a{kFvLWI4;p4zM|SY@~37Tv%QhP2BzrAzEGF~}a# zgB&k+D_+rSavicy@r!;XAO@767&JMX98$t!Sc!-c^W83k5*4E+cE~+SOpKY>DLa(7 z7&ozieiCBBz|WCRxmQVwNpr)6AE(5$iQV!BB_n1`4Dv>CBOV6iteC~Msh4W)<;0wn zsc&j9C%*$mic6Uqh)yXXW#|+{pYYZ!V*jHI@sq%Dh6JQ8DON1hIB@{EAPFHCG8v0_ z4>DmAK_=2-?v*SgDs3S>B(`V~2hnDlUWL>2G`r_uafm!jl81n#7g@x_*Q)dY}74I81N3-vd>zcl`iRrN_E!a7yRAvjBDaqOS(;(A&NXa85t( zPXfH5e;?Qa@G0#Iy$=`lOQ8`KzSg#HF*c(t@dHd{igJm;h1%V5s$9KO+JV%o&Dw)=~F5@~$J_I`S{u zt4_5;bC5udJ?XD@XdQJs2^tm+q&fdaO>Q4Ue@}ESto-W?uA;lx@=QXDQ1>*Ls-Ov# zo2skn2W2?OXjWV!xH<_>qKnq5pmrC%b)O~}K1u@a3*-KljxZk3ocJCjJj#%%8EzPr z?a{d5R**5xilN4vP7o!Q+xIbJm@+l81TPhUsdfT0?uMJ;0x!xc%ECRK@yPtGWZXG$2%cxghBwoc-a)*qt*+i;HHtc;>inIhC#0vbcu zhNTMTyG4Trlt<$#S8O8|v(q@uNUWvGs@7t=#*#K1)QQx-{*=tcp3btXZIvlWmRH**r=-aj=J!8kro5?0>!~2Ulp1np`Emozl+PL>i-Int zW8tht^#4zAbpM9LP~6ZqMGDcXr&Y4?yGpj#D2wr5cUc_J4K6H7c}2fJa{*vh|6?Nn zd_`|(qxd%nNG{l=!Z0Y0X$_3Z*mulHs6YiKRIqx=!I z=kxF_9nKHYx%@NqoBYo9@*?h)-=)6(H@!yT$}5JrVu-7TxJEzgAKtQrkZ0o9Av{*y jfxTi#0~-f4@IRxe!?SdtFzmoq0%4aadHQl82si!$c89g; delta 1528 zcmY*XTWlLu5WTZ@oVC4Pub=Vz?Icc|r0D~Nii*-A5Ga*OBNTdt8c^IZ_nUvudJ8n8HMK^jC& z)IxfghAqvh4d@XX(W5k~$7sybTv}XD(1f0($@P6Hn!@vG5XMVKv;c(Fu$PSOnvU8c?@oD;rvNI*DSG#ZZi?redQT zQHiqzDv5PvlWJp0bu&w`^s)ve-}_MOp7q}ZIL3`&3sx?M@RWCWE!={4`S0P6;bQm0fjq!!_s7U)fKRy` zy8s_`FU58W@b$&yYXW@EUr%${k8|b5--dtvG#|_CvY&(ni5r=Nf!SG{C_7rq2Ba!Z zlKKIDH?w7N>A!V0>}{_hcChk>z0%iq82!xG5t@<}DTdU6+J%O%;%ELSIYU^$kj{{E zwx*{Ms00lU6VZapcs>g?WfnH<%x$e3xW^**ShUBc@R-;=F@Db7^fsJ^%n~hOWuWOa zoNYHtnh!FW;r*AfBwve%7JvTV<3p8jW&J9aT84I{Lz;@AoP>I?5$fH6n2r*|fj)!Y zix18&JDN%(T8XvehGL#yl`*f(CDzv{b4kOCaf*qEX=`PsV-7`bx_2m+kT)ENg>!wg zWCnZO$ex6w(?FU&APXK=Y~&1I3$RzhEOFpOG0eQ|n_2gV;V>x;^3~ilMEFm+ZeT&F zsfS)XP*Zia+Nh5=jx;ELa%e;;2{-!c`&CW5(Ko+eoqwLM<~wjd-&ZK|Ka(MTzL0`E z|EzH2)Nq;SlAwSD z!dhZYwo8y$bJ=7;f*>eh7p4RWce*g2_$%D+00A6mCJHA0A&U;onwm?92#OE`@wl*7 zyNp*Zj7&JNoP#f^yfZr0{eE}>K=1Au0Z3oLbgh7JBhXth$J7_pDpRZT2h{r0yf#{d ztNiWJ58z9_tNa5T<%45sxYm7S>^#61{Fm{^V1?f|F(h8cGfEHFKH=)bIDE%fC#GPT zU!K?t@A2e@Xp5aq`$jGHJ1O_T=63DXL{{sRLnZ%6') @login_required def install_component_from_archive(component_id): @@ -292,6 +287,8 @@ with app.app_context(): response.raise_for_status() # Шлях до завантаженого архіву archive_path = os.path.join(component_folder, f"{selected_component['name']}.zip") + # Встановити залежності з файлу requirements.txt + # Зберегти архів на диск with open(archive_path, "wb") as file: for chunk in response.iter_content(chunk_size=8192): @@ -299,13 +296,10 @@ with app.app_context(): # Розпакувати архів with zipfile.ZipFile(archive_path, "r") as zip_ref: zip_ref.extractall(component_folder) + # Видалити архів os.remove(archive_path) - # Встановити залежності з файлу requirements.txt - requirements_file = os.path.join(component_folder, "requirements.txt") - if os.path.isfile(requirements_file): - pip_command = f"{current_app.config['VENV_BIN_PATH']}/python -m pip install -r {requirements_file}" - subprocess.run(pip_command, shell=True, check=True) + # Шлях до файлу, до якого потрібно додати код file_path = 'routes.py' # Код, який потрібно додати @@ -319,6 +313,7 @@ with app.app_context(): file.write(code) file.write('\n') + # Оновити базу даних з встановленою компонентою component = Component.query.filter_by(name=selected_component['name']).first() if not component: @@ -339,11 +334,20 @@ with app.app_context(): db.session.commit() - return f'Component installed successfully: {selected_component["name"]} v{version} ' + return f'Component installed successfully: {selected_component["name"]} v{version}, please wait installing requirments... ' except Exception as e: return f'Error installing component: {str(e)}' + @components_bp.route('/install-requirments/', methods=['GET']) + @login_required + def install_requirments(selected_component_name): + requirements_file = os.path.join('components', selected_component_name, "requirements.txt") + if os.path.isfile(requirements_file): + pip_command = f"{current_app.config['VENV_BIN_PATH']}/python -m pip install -r {requirements_file}" + subprocess.run(pip_command, shell=True, check=True) + return f'Requirements installed successfully: ' + @components_bp.route('/remove_dependencies/', methods=['GET']) @login_required diff --git a/main.py b/main.py index 07a1b45..19cdfa7 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,7 @@ app.config['JSON_SORT_KEYS'] = False app.config['TIMEZONE'] = pytz.timezone('Europe/Kiev') app.config['SECRET_KEY'] = 'JH&INH987gFDHdsagh&8dwbjdw8ckw' app.config['DOMAIN'] = 'http://127.0.0.1:5001/' +app.config['VENV_BIN_PATH'] = 'C:/Users/sv-work/PycharmProjects/k2root/venv/Scripts' # setting flask app init_db(app) CORS(app)