o ?¥d.{ã@s¼ddlZddlmZmZmZmZmZmZmZmZddl Z ddl Z ddlm Z ddl m Z ddlmZddlZddlZddlmZddlZddlmZddl Z ddlZdd lmZmZdd lmZdd lmZmZdd lm Z m!Z!m"Z"m#Z#ddl$Z$ddl%Z%ed e&dd�Z'e (e)dƒ¡Z*e j+Z+dd„Z,dd„Z-dd„Z.e'j/ddgd�dd„ƒZ0e'j/dddgd�dd„ƒZ1e'j/d ddgd�d!d"„ƒZ2e' /d#¡d$d%„ƒZ3e' /d&¡d'd(„ƒZ4e' /d)¡d*d+„ƒZ5e' /d,¡d-d.„ƒZ6e' /d/¡d0d1„ƒZ7e'j/d2dgd�d3d4„ƒZ8e' /d5¡d6d7„ƒZ9e'j/d8dgd�d9d:„ƒZ:e'j/d;dgd�d¡d?d@„ƒZdGdH„Z?e' /dI¡e#dJdK„ƒƒZ@e' /dL¡e#dMdN„ƒƒZAe' /dO¡dPdQ„ƒZBdS)RéN)ÚFlaskÚ BlueprintÚjsonifyÚrender_templateÚredirectÚurl_forÚsessionr)Úrequesté)Úk2)Ú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Úlenrrr"r#Ú generate_id!s$r,cstˆƒ‡fdd„ƒ}|S)Ncs"dtvr ttdƒƒSˆ|i|¤ŽS)NÚusernamezcomponents.first_login)rrr)ÚargsÚkwargs©Ú view_funcrr#Údecorated_view&s z,first_login_required..decorated_viewr)r1r2rr0r#Úfirst_login_required%sr3csŠ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 Úitemr5rr#r$Bsz)remove_from_yaml_file..ÚwF)Údefault_flow_style)ÚopenÚyamlÚ safe_loadÚdump)Ú file_pathr6ÚfZ existing_dataZ updated_datarr5r#Úremove_from_yaml_file>s ÿ "ÿrCz/api/languagesÚGET)ÚmethodscCs”d}t|›d�dƒ� }t |¡}Wdƒn1swYg}| d¡|durC|dD]}d|d›d|d›d�}| |¡q.d  |¡}|S) Nrú/components.ymlr4Ú languagesz components/Únameú/z /languagesú;)r=r>r?Úappendr))Úproject_folderÚfileÚcomponents_dataZlanguages_pathsÚ componentZcomponent_languages_directoryÚresultrrr#Ú find_languageHs ÿ    rQrIÚPOSTcCs~d}t|›d�dƒ� }t |¡}Wdƒn1swY|dur'tdƒStdd„|dDƒdƒ}|r;ttdƒƒStdƒS)NrrFr4ú /dashboardcsó,�|]}|ddkr| dd¡r|VqdS©rHÚk2siteÚ installedFNr7©r Úcomprrr#Ú jó€*zhome..zk2site.main_page)r=r>r?rÚnextr)Úcomponents_folderrMrNÚk2site_componentrrr#Úhome^s ÿþ r_z /first-logincCsltjdkr2tj d¡}tj d¡}tdD]}|d|kr/|d|kr/|td<ttdƒƒSqdStdƒS)NrRr-ÚpasswordZuserszcomponents.dashboarduBÐ�евірне ім'Ñ� кориÑ�тувача або пароль.zfirst-login.html) r ÚmethodÚformr8Úconfigrrrr)r-r`Úuserrrr#Ú first_loginss    €rez/change_language/cCs|td<|t_ttjƒS)NÚlang)rr Úcurrent_languagerr Úreferrer)rfrrr#Úchange_language€s rirSc 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.ymlr4rcSóg|]}|d‘qS©rHr©r rOrrr#r$‘ózdashboard..csrTrUr7rXrrr#rZ“r[zdashboard..zcomponents.component_list_dasbúapi/componentscSóg|]}|‘qSrrr9rrr#r$žóÚ search_querycsRg|]%}|drˆ ¡|d ¡vs%n |dr#ˆ ¡|d ¡vrn q|‘qS©rHFÚ description©Úlowerrm©rrrr#r$ªsÿÿÿÿþzdashboard.html)rÚcomponents_namesÚcomponent_serverrrÚlanguage)r=r>r?r\rrÚrequestsr8r Ú update_domainÚjsonr r.rgr) rMrNrrxr^ÚresponseÚ json_dataryÚfiltered_componentsrgrrwr#Ú dashboard‡s<  ÿþ  þr�z&/show_components/có>t tj›d�¡}| ¡}t‡fdd„|Dƒdƒ}td|d�S)Nroc3ó �|] }|dˆkr|VqdS©ÚidNrrm©Ú component_idrr#rZ»ó€z"show_components..zcomponent-info.html©Úselected_component©r{r8r r|r}r\r©r‡r~rrŠrr†r#Úshow_components·ó r�z+/show_components-site/cr‚)Nroc3rƒr„rrmr†rr#rZÃrˆz'show_components_site..zcomponent-info-site.htmlr‰r‹rŒrr†r#Úshow_components_site¿rŽ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).Nrroc3rƒr„rrmr†rr#rZrˆz1install_component_from_archive..zComponent not foundZlatest_component_dataZlatest_versionT)Úexist_ok)ÚstreamrHz.zipÚwbi )Ú chunk_sizer4z.gitú routes.pyZ k2grid_basezfrom components.Ú.z.views import z app.register_blueprint(z, url_prefix='/')rVz2login_manager = k2().init_lm(app) from components.z, url_prefix='/z')ÚaÚ rFc3s$�|] }|dˆdkr|VqdS)rHNr)r Úcr‰rr#rZNs€"r…ÚversionÚgit_linkÚ dependenciesrWrt)r…rHrtr™ršr›rWz"Component installed successfully: z vÚ z�, please wait installing requirments... zError installing component: )r{r8r r|r}r\ÚosÚpathr)ÚmakedirsÚraise_for_statusr=Ú iter_contentÚwriteÚzipfileÚZipFileÚ extractallÚremoveÚexistsÚisdirÚrenamer>r?r,rKr@Ú$search_babel_translation_directoriesÚbabel_translation_directoriesÚ ExceptionÚstr)r‡rLr~rZ archive_urlr™Zcomponent_folderZ archive_pathrMÚchunkZzip_refr6Zold_folder_pathZnew_folder_pathrAÚcoderNZexisting_componentÚer)r‡rŠr#Úinstall_component_from_archive s’   ÿÿ ÿ  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ÚisfileÚ subprocessÚrunr¬r­)Zselected_component_nameÚ venv_bin_pathÚrequirements_fileZ pip_commandr°rrr#Úinstall_requirments…s&   ø €ÿr¿z/install-requirments-componentscCspd}d}tj |¡r%tddƒ�}| ¡ ¡}Wdƒn1s wY|r6|D] }t d|›�¡}q)dSdS)Nzrequirements_components.txtr4z/install_components/ziRequirements components installed successfully z8)r�ržrºr=ÚreadÚ splitlinesr{r8)r¾Z component_idsrMr‡r~rrr#Ú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) Nrjr4rr…rHr”cs g|] }| ¡ˆdvr|‘qS)r›)Ústrip)r Úline©rOrr#r$Ês z'remove_dependencies..r;FrWzXComponent successfully turn off )r=r>r?Ú readlinesÚ writelinesr@)r‡rMrNr6rAÚlinesZ updated_linesrrÅ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) Nrjr4úLComponent not found rr…r”r›r–TrWr;zYDependencies added successfully )r=r>r?r¢r@)r‡rMrNrOrYrAr¯rrr#Ú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) NrrFr4rÊr…rHcsg|] }|dˆkr|‘qS)r…rrXr†rr#r$r%z$remove_component..r;zWComponent removed successfully ) r=r>r?r�ržr)r§ÚshutilÚrmtreer@)r‡r]rMrNrOrYZrepository_folderrr†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ÚtorIÚ-rFr4cSrkrlrrXrrr#r$0rnzadd_to_menu..éÈ) r{r8r ÚdomainrKr}ÚreplaceÚadd_menu_with_permissions_dbr=r>r?Ú status_coder) r]Údatar~Ú prev_menur:Ú name_menuÚ caption_menurMrNrxr6rrr#Ú 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) NrrFr4cSrkrlrrXrrr#r$Nrnz"get_admin_menu..rVzapi/add-to-menurÑrÒrÓrIrÔ)r=r>r?rrZ get_role_idr{r8r rÖrZget_menu_items_by_rolesr}r×rK) r]rMrNrxZrole_idr~Zmenu_items_listZ filter_menur:Zfiltered_childrenZimrrr#Úget_admin_menuBs0 ÿ    € €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-r4r;r!Údr˜ÚexpÚimpÚsettableÚcutpastÚenableZroleid) rÚdbrÚexecuteÚfetchonerÚaddÚcommitrrâ)rÜrÛrÝÚmenurPÚcountZnew_menu_elementZ new_pravarrr#rØhs<ü  ó å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) NrocSrprrr9rrr#r$‘rqz&component_add_dasb..rrcsTg|]&}|drˆ ¡|d ¡vs&n  |dr$ˆ ¡|d ¡vrn q|‘qSrsrurmrwrr#r$™s"ÿÿÿÿþÿýrrFr4rHr™zdashboard-add.html)ryrrrxÚcomponents_version) r{r8r r|r}r r.r=r>r?rKr) r~rryr€rLrMrNrxrñrOrHr™rrwr#Úcomponent_add_dasb‹s4  ÿ  ÿròú/component-listcCs^tddƒ� }t |¡}Wdƒn1swY|dus"d|vr%g}n|d}td|d�S)Nrjr4rzdashboard-list.html)r)r=r>r?r)rMrNrrrr#Úcomponent_list_dasb³s  ÿ rôrÏcCs&dddidddœdddœgd œg}|S) NzAdd componentsÚiconzmdi-account-circle-outlinezInstall new componentsrð)rÐrÓzInstalled componentsró)rÐrõrÑr)rîrrr#Ú menu_itemsÂsþýÿ rö)Cr£Úflaskrrrrrrrr�rÌr Úk2cfgr Z flask_migrater r{r»r r>Ú functoolsrr¸Z k2admmenurrÚ sqlalchemyrÚflask_jwt_extendedrrÚ flask_loginrrrrr¶r&Ú__name__Ú components_bpr?r=rcrér,r3rCÚrouterQr_rerir�r�r�r±r¿rÂrÉrËrÎrÞrßrØròrôrörrrr#Ús„(           /  J z   # # % " $# &