o ·šdCcã@s’ddlZddlmZmZmZmZmZmZmZmZddl Z ddl Z ddlm Z ddl m Z ddlmZddlmZddlZddlZddlmZddlZdd lmZddl Z ddlZdd lmZmZdd lmZdd lmZm Z ed e!dd�Z"e #e$dƒ¡Z%e j&Z&dd„Z'dd„Z(e"j)ddgd�dd„ƒZ*e"j)dddgd�dd„ƒZ+e"j)dddgd�dd „ƒZ,e" )d!¡d"d#„ƒZ-e" )d$¡d%d&„ƒZ.e" )d'¡d(d)„ƒZ/e" )d*¡d+d,„ƒZ0e" )d-¡d.d/„ƒZ1e"j)d0dgd�d1d2„ƒZ2e" )d3¡d4d5„ƒZ3e"j)d6dgd�d7d8„ƒZ4e"j)d9dgd�d:d;„ƒZ5e" )d<¡d=d>„ƒZ6e"j)d?dgd�d@dA„ƒZ7e" )dB¡e ƒdCdD„ƒƒZ8dEdF„Z9e" )dG¡dHdI„ƒZ:e" )dJ¡dKdL„ƒZ;e" )dM¡dNdO„ƒZ.decorated_viewr)rr rrrÚfirst_login_requiredsr!csŠt|dƒ�}t |¡p g}Wdƒn1swY‡fdd„|Dƒ}t|dƒ�}tj||dd�WdƒdS1s>wYdS)NÚrcsg|] }| d¡ˆkr|‘qS©Úcomponent_name)Úget©Ú.0Úitemr#rrÚ <óz)remove_from_yaml_file..ÚwF)Údefault_flow_style)ÚopenÚyamlÚ safe_loadÚdump)Ú file_pathr$ÚfZ existing_dataZ updated_datarr#rÚremove_from_yaml_file8s ÿ "ÿr3z/api/languagesÚGET)ÚmethodscCsZtj ¡}g}| d¡|D]}d|jd|jd}| |¡qd |¡}t|ƒ|S)NÚ languagesz components/ú/z /languagesú;)r ÚqueryÚallÚappendÚnameÚjoinÚprint)rZlanguages_pathsÚ componentZcomponent_languages_directoryÚresultrrrÚ find_languageBs    rAr7ÚPOSTcCs4tj ¡}dd„|Dƒ}d|vrttdƒƒStdƒS)NcSóg|]}|j‘qSr©r<©r'r?rrrr)Tózhome..Úk2sitezk2test.new_component2ú /dashboard)r r9r:rr)rÚcomponents_namesrrrÚhomeQs  rJz /first-logincCsltjdkr2tj d¡}tj d¡}tdD]}|d|kr/|d|kr/|td<ttdƒƒSqdStdƒS)NrBrÚpasswordZuserszcomponents.dashboarduBÐ�евірне ім'Ñ� кориÑ�тувача або пароль.zfirst-login.html) r ÚmethodÚformr%Úconfigrrrr)rrKÚuserrrrÚ first_login\s    €rPz/change_language/cCs|td<|t_ttjƒS)NÚlang)rr Úcurrent_languagerr Úreferrer)rQrrrÚchange_languageis rTrHcsÄtj ¡}dd„|Dƒ}d|vrttdƒƒSzt tj›d�¡}|  ¡}dd„|Dƒ}Wnd}Ytj ¡}dd„|Dƒ}t j  d¡‰g}ˆrS‡fd d„|Dƒ}n|}tj }t d |||ˆ|d �S) NcSrCrrDrErrrr)srFzdashboard..rGz!components_bp.component_list_dasbúapi/componentscSóg|]}|‘qSrrr&rrrr)}ócSrCrrDrErrrr)ƒrFÚ search_querycsRg|]%}|drˆ ¡|d ¡vs%n |dr#ˆ ¡|d ¡vrn q|‘qS©r<FÚ description©ÚlowerrE©rXrrr)‰sÿÿÿÿþzdashboard.html)rrIÚcomponent_serverrXÚlanguage)r r9r:rrÚrequestsr%r Ú update_domainÚjsonr rrRr)rrIÚresponseÚ json_datar^Úfiltered_componentsrRrr]rÚ dashboardps,    þrfz&/show_components/cs>t tj›d�¡}| ¡}t‡fdd„|Dƒdƒ}td|d�S)NrUc3ó �|] }|dˆkr|VqdS©ÚidNrrE©Ú component_idrrÚ šó€z"show_components..zcomponent-info.html)Úselected_component)r`r%r rarbÚnextr)rkrcrdrnrrjrÚshow_components–s rpz-/install_components_git/c sœd}t tj›d�¡}| ¡}t‡fdd„|Dƒdƒ}|d}tj ||¡}|d}zŠtj  |¡s6t  |¡tj |d¡}tj  |¡sJt |dƒ  ¡d d d d d d|d|g} t  | ¡d} |d} t | dƒ�} |  d¡|  | ¡|  d¡Wdƒn1s�wYtjj|dd� ¡} | s²t|d|d|d|d|ddd�}tj |¡tj ¡dWSt jyÍ}z dt|ƒWYd}~Sd}~ww)NrrUc3rgrhrrErjrrrl¥rmz)install_components_git..r<Úgit_linkz __init__.pyÚazvenv/Scripts/python.exez-mZpipÚinstallz --use-pep517zgit+z --target=ú routes.pyÚ dependenciesÚ rDrZÚversionT©r<rZrwrqruÚ installedzOInstalled successfully zError installing : )r`r%r rarbroÚosÚpathr=ÚexistsÚmakedirsr-ÚcloseÚ subprocessÚ check_callÚwriter r9Ú filter_byÚfirstÚdbrÚaddÚcommitÚCalledProcessErrorÚstr)rkÚproject_folderrcrdrnÚrepository_nameÚrepository_folderZ git_repo_urlZ init_fileÚcommandr1ÚcodeÚfiler?Z new_componentÚerrjrÚinstall_components_gitžsR   ÿ     üú €ÿr�z)/install_components/c sÊd}t tj›d�¡}| ¡}t‡fdd„|Dƒdƒ}|dur!dS|d}|d}�z tj |¡}tj |dd �tj|dd �}|  ¡tj ||d ›d �¡}t |d ƒ�} |j dd�D]} |   | ¡q[Wdƒn1smwYt |d¡� } |  |¡Wdƒn1sˆwYt |¡|d } tj || d¡} tj || ¡}tj | ¡r¸tj | ¡r¸t | |¡d}d|d ›d|d ›d|d ›d|d ›d|d ›d� }t |dƒ�} |   d¡|   |¡|   d¡Wdƒn1sõwYtjj|d d� ¡}|�st|d |d||d|dd�}tj |¡n||_|d|_||_d|_tj  ¡t !¡d|d ›d |›d!tj"›d"|d ›d#� WSt#�yd}z d$t$|ƒ›�WYd}~Sd}~ww)%NrrUc3rgrhrrErjrrrlèrmz1install_component_from_archive..zComponent not foundZlatest_component_dataZlatest_versionT)Úexist_ok)Ústreamr<z.zipÚwbi )Ú chunk_sizer"z.gitrtzfrom components.Ú.z.views import z app.register_blueprint(z, url_prefix='/z')rrrvrDrZrqrxz"Component installed successfully: z vÚ z�, please wait installing requirments... zError installing component: )%r`r%r rarbrorzr{r=r}Úraise_for_statusr-Ú iter_contentr�ÚzipfileÚZipFileÚ extractallÚremover|ÚisdirÚrenamer r9r‚rƒr„rr…rwrqruryr†Ú$search_babel_translation_directoriesÚbabel_translation_directoriesÚ Exceptionrˆ)rkr‰rcrdrnZ archive_urlrwZcomponent_folderZ archive_pathrŽÚchunkZzip_refr$Zold_folder_pathZnew_folder_pathr1r�r?r�rrjrÚinstall_component_from_archiveásv   ÿÿ ÿ  8    üú   þ€ÿr£z5/install-requirments/cCsFtƒtj d|d¡}tj |¡r!tj›d|›�}tj|ddd�dS)Nrzrequirements.txtz/python -m pip install -r T)ÚshellÚcheckzµRequirements installed successfully please wait installing requirments components... ) Úget_admin_menurzr{r=Úisfiler Ú venv_bin_pathrÚrun)Zselected_component_nameÚrequirements_fileZ pip_commandrrrÚinstall_requirments4s  r«z/install-requirments-componentscCspd}d}tj |¡r%tddƒ�}| ¡ ¡}Wdƒn1s wY|r6|D] }t d|›�¡}q)dSdS)Nzrequirements_components.txtr"z/install_components/ziRequirements components installed successfully z8)rzr{r§r-ÚreadÚ splitlinesr`r%)rªZ component_idsrŽrkrcrrrÚinstall_requirements_componentsDs  ÿÿr®z*/remove_dependencies/cs¼tj |¡‰ˆs dSˆj}t tj›d�¡d}t|dƒ� }| ¡}Wdƒn1s,wY‡fdd„|Dƒ}t|dƒ� }|  |¡Wdƒn1sOwYdˆ_ t j   ¡d S) NúLComponent not found úapi/add-to-menurtr"csg|] }| ¡ˆjvr|‘qSr)Ústripru)r'Úline©r?rrr)gr*z'remove_dependencies..r+FzXComponent successfully turn off )r r9r%r<r`r Údomainr-Ú readlinesÚ writelinesryr„rr†)rkr$r1rŽÚlinesZ updated_linesrr³rÚremove_dependenciesWs   ÿ  ÿ r¸z'/add_dependencies/cCsftj |¡}|s dSd}|j}t|dƒ� }| |¡Wdƒn1s$wYd|_tj  ¡dS)Nr¯rtrrTzXDependencies added successfully ) r r9r%rur-r�ryr„rr†)rkr?r1r�rŽrrrÚadd_dependenciesqs   þ r¹z'/remove-component/c CsŒd}tj |¡}|j}tj ||¡}ztj |¡rt  |¡|r+t j   |¡t j   ¡WdStyE}z dt|ƒWYd}~Sd}~ww)NrzWComponent removed successfully zError removing component: )r r9r%r<rzr{r=r|ÚshutilÚrmtreer„rÚdeleter†r¡rˆ)rkr‰r?rŠr‹r�rrrÚremove_component…s     €þr½z/api/add-to-menucCs0g}t tj›d�¡}| | ¡d¡| ¡dd}| ¡ddD]}t|dƒ dd¡}|d}t|||ƒq$t j   ¡}dd „|Dƒ}|D]H}t tj›|›d�¡}|j d kr†| | ¡d¡| ¡dd}| ¡ddD]}|d}|d}t|||ƒqtn||D]}||d <qŠqI|t_ tj S) Nú/menu-admin-itemsrÚtitleÚchildrenÚtor7Ú-cSrCrrDrErrrr)ÌrFzadd_to_menu..éÈr$)r`r%r r´r;rbrˆÚreplaceÚadd_menu_with_permissions_dbr r9r:Ú status_codeÚmenu)ÚdatarcÚ prev_menur(Ú name_menuÚ caption_menurrIrrrÚ add_to_menuÁs4  ý ÿrÌz/api/main-menu/cCs�tƒ}|d}g}t tj›d�¡}t |¡}| ¡D](}g}|dD] }|d|vr0| |¡q#|rC||d<| |¡| ddi¡qt |ƒS)NZ user_roler°rÀrÁÚheadingz APPS & PAGES) rr`r%r r´rZget_menu_items_by_rolesrbr;r)Ú current_userZrole_idZ filter_menurcZmenu_items_listr(Zfiltered_childrenZimrrrr¦às"     € €r¦cCs–tdƒ}tj |d|i¡ ¡}|d}|dkrIt||||d�}tj |¡tj ¡t|j ddddddddddddd� }tj |¡tj ¡dSdS)Nz>SELECT COUNT(*) FROM k2admin_menus WHERE namemenu = :name_menurÊr)ZnamemenuZprevmenuZcaptionÚ module_nameéÿÿÿÿ) Úmenuidrr"r+ÚiÚdÚcÚexpÚimpÚsettableÚcutpastÚenableZroleid) rr„rÚexecuteÚfetchonerr…r†rrÑ)rÊrÉrËrÇr@ÚcountZnew_menu_elementZ new_pravarrrrÅ÷s<ü  ó årÅz/component-addcsrzt tj›d�¡}| ¡}dd„|Dƒ}Wnd}Ytj d¡‰g}ˆr1‡fdd„|Dƒ}n|}td|d�S)NrUcSrVrrr&rrrr) rWz&component_add_dasb..rXcsTg|]&}|drˆ ¡|d ¡vs&n  |dr$ˆ ¡|d ¡vrn q|‘qSrYr[rEr]rrr)(s"ÿÿÿÿþÿýzdashboard-add.html)r^)r`r%r rarbr rr)rcrdr^rerr]rÚcomponent_add_dasbs ÿrÝz/component-listcCstj ¡}td|d�S)Nzdashboard-list.html©r)r r9r:rrÞrrrÚcomponent_list_dasb4s  rßr¾cCs&dddidddœdddœgd œg}|S) NzAdd componentsÚiconzmdi-account-circle-outlinezInstall componentsz component-add)r¿rÁzInstalled componentszcomponent-list)r¿ràrÀr)rÇrrrÚ menu_items;sþýÿ rá)=r™Úflaskrrrrrrrrzrºr Úk2cfgr Zk2compr Z flask_migrater r`rrr.Ú functoolsrÚsysZ k2admmenurrÚ sqlalchemyrÚflask_jwt_extendedrrÚ__name__Ú components_bpr/r-rNr„r!r3ÚrouterArJrPrTrfrpr�r£r«r®r¸r¹r½rÌr¦rÅrÝrßrárrrrÚsz(            %  B R     ;  #