o <¥dÉyã@sÚddlZddlmZmZmZmZmZmZmZmZddl Z ddl Z ddlm Z ddl m Z ddlmZddlmZddlZddlZddlmZddlZdd lmZddl Z ddlZdd lmZmZdd lmZdd lmZm Z dd l!m"Z"m#Z#m$Z$m%Z%ddl&Z&ddl'Z'ede(dd�Z)e *e+dƒ¡Z,e j-Z-dd„Z.dd„Z/dd„Z0e)j1ddgd�dd„ƒZ2e)j1dddgd�dd „ƒZ3e)j1d!ddgd�d"d#„ƒZ4e) 1d$¡d%d&„ƒZ5e) 1d'¡d(d)„ƒZ6e) 1d*¡d+d,„ƒZ7e) 1d-¡d.d/„ƒZ8e) 1d0¡d1d2„ƒZ9e) 1d3¡d4d5„ƒZ:e)j1d6dgd�d7d8„ƒZ;e) 1d9¡d:d;„ƒZ„ƒZ=e)j1d?dgd�d@dA„ƒZ>e) 1dB¡dCdD„ƒZ?e)j1dEdgd�dFdG„ƒZ@e) 1dH¡e%dIdJ„ƒƒZAdKdL„ZBe) 1dM¡e%dNdO„ƒƒZCe) 1dP¡e%dQdR„ƒƒZDe) 1dS¡dTdU„ƒZEdS)VéN)ÚFlaskÚ BlueprintÚjsonifyÚrender_templateÚredirectÚurl_forÚsessionr)Úrequesté)Úk2)Ú Component)ÚMigrate)Ú current_app©Úwraps)Ú K2admin_menusÚK2admin_Menus_Prava)Útext)Úget_jwt_identityÚ jwt_required)Ú login_userÚ current_userÚ logout_userÚlogin_requiredÚ componentsÚ templates)Útemplate_folderzdb/first-login.ymlcs6t ¡jdd…‰d ‡fdd„tdtˆƒdƒDƒ¡S)Né Úcsg|] }ˆ||d…‘qS)é©)Ú.0Úi©Z generated_idr ú;C:\Users\sv-work\PycharmProjects\k2root\k2root\k2\k2rout.pyÚ #ózgenerate_id..rr)ÚuuidÚuuid4ÚhexÚjoinÚrangeÚlenr r r#r$Ú generate_id!s$r-cstˆƒ‡fdd„ƒ}|S)Ncs"dtvr ttdƒƒSˆ|i|¤ŽS)NÚusernamezcomponents.first_login)rrr)ÚargsÚkwargs©Ú view_funcr r$Údecorated_view&s z,first_login_required..decorated_viewr)r2r3r r1r$Úfirst_login_required%sr4csŠt|dƒ�}t |¡p g}Wdƒn1swY‡fdd„|Dƒ}t|dƒ�}tj||dd�WdƒdS1s>wYdS)NÚrcsg|] }| d¡ˆkr|‘qS©Úcomponent_name©Úget©r!Úitemr6r r$r%Bsz)remove_from_yaml_file..ÚwF)Údefault_flow_style)ÚopenÚyamlÚ safe_loadÚdump)Ú file_pathr7ÚfZ existing_dataZ updated_datar r6r$Úremove_from_yaml_file>s ÿ "ÿrDz/api/languagesÚGET)ÚmethodscCsZtj ¡}g}| d¡|D]}d|jd|jd}| |¡qd |¡}t|ƒ|S)NÚ languagesz components/ú/z /languagesú;)r ÚqueryÚallÚappendÚnamer*Úprint)rZlanguages_pathsÚ componentZcomponent_languages_directoryÚresultr r r$Ú find_languageHs    rQrHÚPOSTcCs~d}t|›d�dƒ� }t |¡}Wdƒn1swY|dur'tdƒStdd„|dDƒdƒ}|r;ttdƒƒStdƒS)Nrú/components.ymlr5ú /dashboardcsó,�|]}|ddkr| dd¡r|VqdS©rMÚk2siteÚ installedFNr8©r!Úcompr r r$Ú có€*zhome..zk2site.main_page)r>r?r@rÚnextr)Úcomponents_folderÚfileÚcomponents_dataÚk2site_componentr r r$ÚhomeWs ÿþ rbz /first-logincCsltjdkr2tj d¡}tj d¡}tdD]}|d|kr/|d|kr/|td<ttdƒƒSqdStdƒS)NrRr.ÚpasswordZuserszcomponents.dashboarduBÐ�евірне ім'Ñ� кориÑ�тувача або пароль.zfirst-login.html) r ÚmethodÚformr9Úconfigrrrr)r.rcÚuserr r r$Ú first_loginls    €rhz/change_language/cCs|td<|t_ttjƒS)NÚlang)rr Úcurrent_languagerr Úreferrer)rir r r$Úchange_languageys rlrTc s tddƒ� }t |¡}Wdƒn1swY|dus"d|vr%g}n|d}g}dd„|Dƒ}tdd„|dDƒdƒ}|rFttdƒƒSzt tj ›d �¡}|  ¡}d d„|Dƒ}Wnd}Yt j  d ¡‰g}ˆrw‡fd d„|Dƒ}n|}tj } td |||ˆ| d�S)Núcomponents/components.ymlr5rcSóg|]}|d‘qS©rMr ©r!rOr r r$r%Šózdashboard..csrUrVr8rYr r r$r[Œr\zdashboard..zcomponents.component_list_dasbúapi/componentscSóg|]}|‘qSr r r:r r r$r%—óÚ search_querycsRg|]%}|drˆ ¡|d ¡vs%n |dr#ˆ ¡|d ¡vrn q|‘qS©rMFÚ description©Úlowerrp©rur r$r%£sÿÿÿÿþzdashboard.html)rÚcomponents_namesÚcomponent_serverruÚlanguage)r>r?r@r]rrÚrequestsr9r Ú update_domainÚjsonr r/rjr) r_r`rr{raÚresponseÚ json_datar|Úfiltered_componentsrjr rzr$Ú dashboard€s<  ÿþ  þr„z&/show_components/có>t tj›d�¡}| ¡}t‡fdd„|Dƒdƒ}td|d�S)Nrrc3ó �|] }|dˆkr|VqdS©ÚidNr rp©Ú component_idr r$r[´ó€z"show_components..zcomponent-info.html©Úselected_component©r~r9r rr€r]r©rŠr�r‚r�r r‰r$Úshow_components°ó r�z+/show_components-site/cr…)Nrrc3r†r‡r rpr‰r r$r[¼r‹z'show_components_site..zcomponent-info-site.htmlrŒrŽr�r r‰r$Úshow_components_site¸r‘r’z-/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)Nrrrc3r†r‡r rpr‰r r$r[Çr‹z)install_components_git..rMÚgit_linkz __init__.pyÚazvenv/Scripts/python.exez-mZpipÚinstallz --use-pep517zgit+z --target=ú routes.pyÚ dependenciesÚ rorwÚversionT)rMrwr™r“r—rXzOInstalled successfully zError installing : )r~r9r rr€r]ÚosÚpathr*ÚexistsÚmakedirsr>ÚcloseÚ subprocessÚ check_callÚwriter rJÚ filter_byÚfirstÚdbrÚaddÚcommitÚCalledProcessErrorÚstr)rŠÚproject_folderr�r‚r�Zrepository_nameÚrepository_folderZ git_repo_urlZ init_fileÚcommandrBÚcoder_rOZ new_componentÚer r‰r$Ú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}| dkrÖdˆd ›dˆd ›dˆd ›dˆd ›d� }n=| dkr÷dˆd ›dˆd ›dˆd ›dˆd ›dˆd ›d� }ndˆd ›dˆd ›dˆd ›dˆd ›dˆd ›d� }t |dƒ�}|  d¡|  |¡|  d¡Wdƒn 1�s3wYt |›d�dƒ� }t |¡}Wdƒn 1�sQwY|dk�r_dgi}t‡fd d„|dDƒdƒ}|�rˆtƒ|d!<||d"<ˆd#|d#<||d$<d|d%<n|d tƒˆd ˆd&|ˆd#|dd'œ¡t |›d�dƒ�}t ||¡Wdƒn 1�s¸wYt ¡d(ˆd ›d)|›d*tj›d+ˆd ›d,� WSt�yï}z d-t|ƒ›�WYd}~Sd}~ww).Nrrrc3r†r‡r rpr‰r r$r[ r‹z1install_component_from_archive..zComponent not foundZlatest_component_dataZlatest_versionT)Úexist_ok)ÚstreamrMz.zipÚwbi )Ú chunk_sizer5z.gitr–Z k2grid_basezfrom components.Ú.z.views import z app.register_blueprint(z, url_prefix='/')rWz2login_manager = k2().init_lm(app) from components.z, url_prefix='/z')r”r˜rSc3s$�|] }|dˆdkr|VqdS)rMNr )r!ÚcrŒr r$r[Gs€"rˆr™r“r—rXrw)rˆrMrwr™r“r—rXz"Component installed successfully: z vÚ z�, please wait installing requirments... zError installing component: )r~r9r rr€r]ršr›r*r�Úraise_for_statusr>Ú iter_contentr¡ÚzipfileÚZipFileÚ extractallÚremoverœÚisdirÚrenamer?r@r-rLrAÚ$search_babel_translation_directoriesÚbabel_translation_directoriesÚ Exceptionr¨)rŠr©r�r‚Z archive_urlr™Zcomponent_folderZ archive_pathr_ÚchunkZzip_refr7Zold_folder_pathZnew_folder_pathrBr¬r`Zexisting_componentr­r )rŠr�r$Úinstall_component_from_archives’   ÿÿ ÿ  0:8    ü ÿ ÿ   ù ÿ þ€ÿrÂz5/install-requirments/c Csøzbtjdkr2tj tj tj¡d¡}tj d|d¡}tj |¡r/|›d|›�}t j |ddd�d WStjdkr`tj tj tj¡d ¡}tj d|d¡}tj |¡r`|›d |›�}t j |ddd�d WSt y{}z d t |ƒ›�WYd}~Sd}~ww) NÚWindowsz venv/Scriptsrzrequirements.txtz/python -m pip install -r T)ÚshellÚcheckÚLinuxzvenv/binz/python3 -m pip install -r z½Requirements installed successfully please wait installing requirments components... zError installing requirmets: ) r Úplatformršr›r*ÚdirnameÚsysÚprefixÚisfilerŸÚrunrÀr¨)Zselected_component_nameÚ venv_bin_pathÚrequirements_fileZ pip_commandr­r r r$Úinstall_requirments~s&   ø €ÿrÏz/install-requirments-componentscCspd}d}tj |¡r%tddƒ�}| ¡ ¡}Wdƒn1s wY|r6|D] }t d|›�¡}q)dSdS)Nzrequirements_components.txtr5z/install_components/ziRequirements components installed successfully z8)ršr›rËr>ÚreadÚ splitlinesr~r9)rÎZ component_idsr_rŠr�r r r$Úinstall_requirements_components—s  ÿÿrÒz*/remove_dependencies/cs&tddƒ� }t |¡}Wdƒn1swY|dur dS|dD] ‰ˆd|kr.ˆq$ˆd}d}t|dƒ� }| ¡}Wdƒn1sIwY‡fdd„|Dƒ}t|d ƒ� }| |¡Wdƒn1slwYd ˆd <tdd ƒ�}t ||¡Wdƒd S1sŒwYd S) Nrmr5rrˆrMr–cs g|] }| ¡ˆdvr|‘qS)r—)Ústrip)r!Úline©rOr r$r%Ãs z'remove_dependencies..r<FrXzXComponent successfully turn off )r>r?r@Ú readlinesÚ writelinesrA)rŠr_r`r7rBÚlinesZ updated_linesr rÕr$Úremove_dependenciesªs2  ÿ  €  ÿ  ÿ  ÿürÙz'/add_dependencies/cCsötddƒ� }t |¡}Wdƒn1swY|dur dSd}|dD] }|d|kr2|}nq&|dur9dSd}|d}t|dƒ� }| |¡Wdƒn1sTwYd |d <tdd ƒ�}t ||¡Wdƒd S1stwYd S) Nrmr5úLComponent not found rrˆr–r—r”TrXr<zYDependencies added successfully )r>r?r@r¡rA)rŠr_r`rOrZrBr¬r r r$Úadd_dependenciesÎs2  ÿ  þ  þ  ÿýrÛz'/remove-component/csd}t|›d�dƒ� }t |¡}Wdƒn1swY|dur%dSd}|dD] }|dˆkr7|}nq+|dur>dStj ||d¡}tj |¡rRt |¡‡fdd„|dDƒ|d<t|›d�d ƒ�}t  ||¡Wdƒd S1sywYd S) NrrSr5rÚrˆrMcsg|] }|dˆkr|‘qS)rˆr rYr‰r r$r%r&z$remove_component..r<zWComponent removed successfully ) r>r?r@ršr›r*rœÚshutilÚrmtreerA)rŠr^r_r`rOrZrªr r‰r$Úremove_componentòs0 ÿ  þ   ÿýrÞz/api/add-to-menuc Cs`d}g}t tj›d�¡}| | ¡d¡| ¡dd}| ¡ddD]}d|d dd ¡}|d}t|||ƒq&t|›d �d ƒ� }t   |¡}Wdƒn1sUwY|dur¬d d „|dDƒ} | D]B} t tj›| ›d�¡}|j dkr«| | ¡d¡| ¡dd}| ¡ddD]}d|d dd ¡}|d}t|||ƒq”qit |ƒS)Nrú/menu-admin-itemsrÚtitleÚchildrenÚk2itmÚtorHÚ-rSr5cSrnror rYr r r$r%)rqzadd_to_menu..éÈ) r~r9r ÚdomainrLr€ÚreplaceÚadd_menu_with_permissions_dbr>r?r@Ú status_coder) r^Údatar�Ú prev_menur;Ú name_menuÚ caption_menur_r`r{r7r r r$Ú add_to_menus2 ÿ €rîz/api/main-menu/c Csød}t|›d�dƒ� }t |¡}Wdƒn1swY|dur'tgƒSdd„|dDƒ}d|vrxt ¡}t tj ›d�¡}t   |¡}g}|  ¡D]'}g} |dD]} d | d   d d ¡|vrg|  | ¡qT| rs| |d<| |¡qLt|ƒStgƒS) NrrSr5cSrnror rYr r r$r%Grqz"get_admin_menu..rWzapi/add-to-menurárârãrHrä)r>r?r@rrZ get_role_idr~r9r rærZget_menu_items_by_rolesr€rçrL) r^r_r`r{Zrole_idr�Zmenu_items_listZ filter_menur;Zfiltered_childrenZimr r r$Úget_admin_menu;s0 ÿ    € €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éÿÿÿÿ) Úmenuidr.r5r<r"Údr´ÚexpÚimpÚsettableÚcutpastÚenableZroleid) rr¤rÚexecuteÚfetchonerr¥r¦rrò)rìrëríÚmenurPÚcountZnew_menu_elementZ new_pravar r r$rèas<ü  ó årèú/component-addc süzt tj›d�¡}| ¡}dd„|Dƒ}Wnd}Ytj d¡‰g}ˆr1‡fdd„|Dƒ}n|}d}t|›d�dƒ� }t  |¡}Wdƒn1sMwYg}g}|duru|dD]} | d } | d } |  | ¡|  | | i¡q^t d |ˆ||d �S) NrrcSrsr r r:r r r$r%Šrtz&component_add_dasb..rucsTg|]&}|drˆ ¡|d ¡vs&n  |dr$ˆ ¡|d ¡vrn q|‘qSrvrxrprzr r$r%’s"ÿÿÿÿþÿýrrSr5rMr™zdashboard-add.html)r|rur{Úcomponents_version) r~r9r rr€r r/r>r?r@rLr) r�r‚r|rƒr©r_r`r{rþrOrMr™r rzr$Úcomponent_add_dasb„s4  ÿ  ÿrÿú/component-listcCs^tddƒ� }t |¡}Wdƒn1swY|dus"d|vr%g}n|d}td|d�S)Nrmr5rzdashboard-list.html)r)r>r?r@r)r_r`rr r r$Úcomponent_list_dasb¬s  ÿ rrßcCs&dddidddœdddœgd œg}|S) NzAdd componentsÚiconzmdi-account-circle-outlinezInstall new componentsrý)ràrãzInstalled componentsr)ràrrár )rûr r r$Ú menu_items»sþýÿ r)Fr¸ÚflaskrrrrrrrršrÜr Úk2cfgr Zk2compr Z flask_migrater r~rŸrr?Ú functoolsrrÉZ k2admmenurrÚ sqlalchemyrÚflask_jwt_extendedrrÚ flask_loginrrrrrÇr'Ú__name__Ú components_bpr@r>rfr¤r-r4rDÚrouterQrbrhrlr„r�r’r®rÂrÏrÒrÙrÛrÞrîrïrèrÿrrr r r r$ÚsŠ(            /   B z   # # % " $# &