o s¤œd»kã@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%ede&dd�Z'e (e)dƒ¡Z*e j+Z+dd„Z,dd„Z-e'j.ddgd�dd„ƒZ/e'j.dddgd�dd„ƒZ0e'j.dddgd�d d!„ƒZ1e' .d"¡d#d$„ƒZ2e' .d%¡d&d'„ƒZ3e' .d(¡d)d*„ƒZ4e' .d+¡d,d-„ƒZ5e' .d.¡d/d0„ƒZ6e' .d1¡d2d3„ƒZ7e'j.d4dgd�d5d6„ƒZ8e' .d7¡d8d9„ƒZ9e'j.d:dgd�d;d<„ƒZ:e'j.d=dgd�d>d?„ƒZ;e' .d@¡dAdB„ƒZdIdJ„Z?e' .dK¡e%dLdM„ƒƒZ@e' .dN¡e%dOdP„ƒƒZAe' .dQ¡dRdS„ƒZBdS)Té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.ymlcstˆƒ‡fdd„ƒ}|S)Ncs"dtvr ttdƒƒSˆ|i|¤ŽS)NÚusernamezcomponents.first_login)rrr)ÚargsÚkwargs©Ú view_func©úAC:\Users\sv-work\PycharmProjects\k2root_clean\k2root\k2\k2rout.pyÚdecorated_view s z,first_login_required..decorated_viewr)r!r$r"r r#Ú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'r"r#Ú <óz)remove_from_yaml_file..ÚwF)Údefault_flow_style)ÚopenÚyamlÚ safe_loadÚdump)Ú file_pathr(ÚfZ existing_dataZ updated_datar"r'r#Úremove_from_yaml_file8s ÿ "ÿr7z/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Úresultr"r"r#Ú find_languageBs    rEr;ÚPOSTcCs4tj ¡}dd„|Dƒ}d|vrttdƒƒStdƒS)NcSóg|]}|j‘qSr"©r@©r+rCr"r"r#r-Tózhome..Úk2sitezk2site.new_component2ú /dashboard)r r=r>rr)rÚcomponents_namesr"r"r#ÚhomeQs  rNz /first-logincCsltjdkr2tj d¡}tj d¡}tdD]}|d|kr/|d|kr/|td<ttdƒƒSqdStdƒS)NrFrÚpasswordZuserszcomponents.dashboarduBÐ�евірне ім'Ñ� кориÑ�тувача або пароль.zfirst-login.html) r ÚmethodÚformr)Úconfigrrrr)rrOÚuserr"r"r#Ú first_login\s    €rTz/change_language/cCs|td<|t_ttjƒS)NÚlang)rr Úcurrent_languagerr Úreferrer)rUr"r"r#Úchange_languageis rXrLcsÈtj ¡}g}dd„|Dƒ}d|vrttdƒƒSzt tj›d�¡}|  ¡}dd„|Dƒ}Wnd}Ytj ¡}dd„|Dƒ}t j  d¡‰g}ˆrU‡fd d„|Dƒ}n|}tj }t d |||ˆ|d �S) NcSrGr"rHrIr"r"r#r-trJzdashboard..rKzcomponents.component_list_dasbúapi/componentscSóg|]}|‘qSr"r"r*r"r"r#r-~ócSrGr"rHrIr"r"r#r-„rJÚ search_querycsRg|]%}|drˆ ¡|d ¡vs%n |dr#ˆ ¡|d ¡vrn q|‘qS©r@FÚ description©ÚlowerrI©r\r"r#r-Šsÿÿÿÿþzdashboard.html)rrMÚcomponent_serverr\Úlanguage)r r=r>rrÚrequestsr)r Ú update_domainÚjsonr rrVr)rrMÚresponseÚ json_datarbÚfiltered_componentsrVr"rar#Ú dashboardps.    þrjz&/show_components/có>t tj›d�¡}| ¡}t‡fdd„|Dƒdƒ}td|d�S)NrYc3ó �|] }|dˆkr|VqdS©ÚidNr"rI©Ú component_idr"r#Ú ›ó€z"show_components..zcomponent-info.html©Úselected_component©rdr)r rerfÚnextr©rprgrhrtr"ror#Úshow_components—ó rxz+/show_components-site/crk)NrYc3rlrmr"rIror"r#rq£rrz'show_components_site..zcomponent-info-site.htmlrsrurwr"ror#Úshow_components_siteŸryrzz-/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)NrrYc3rlrmr"rIror"r#rq®rrz)install_components_git..r@Úgit_linkz __init__.pyÚazvenv/Scripts/python.exez-mZpipÚinstallz --use-pep517zgit+z --target=ú routes.pyÚ dependenciesÚ rHr^ÚversionT©r@r^r�r{rÚ installedzOInstalled successfully zError installing : )rdr)r rerfrvÚosÚpathrAÚexistsÚmakedirsr1ÚcloseÚ subprocessÚ check_callÚwriter r=Ú filter_byÚfirstÚdbrÚaddÚcommitÚCalledProcessErrorÚstr)rpÚproject_folderrgrhrtÚrepository_nameÚrepository_folderZ git_repo_urlZ init_fileÚcommandr5ÚcodeÚfilerCZ new_componentÚer"ror#Úinstall_components_git§sR   ÿ     üú €ÿršz)/install_components/c sFd}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�s3wYtjj|d d� ¡}|�s]t|d |d ||d!|dd"�}tj |¡n||_|d!|_||_d|_tj  ¡t !¡d#|d ›d$|›d%tj"›d&|d ›d'� WSt#�y¢}z d(t$|ƒ›�WYd}~Sd}~ww))NrrYc3rlrmr"rIror"r#rqñrrz1install_component_from_archive..zComponent not foundZlatest_component_dataZlatest_versionT)Úexist_ok)Ústreamr@z.zipÚwbi )Ú chunk_sizer&z.gitr~Ú k2grid_basezfrom components.Ú.z.views import z app.register_blueprint(z, url_prefix='/')rKz, url_prefix='/z$') login_manager = k2().init_lm(app)z')r|r€rHr^r{r‚z"Component installed successfully: z vÚ z�, please wait installing requirments... zError installing component: )%rdr)r rerfrvr„r…rAr‡Úraise_for_statusr1Ú iter_contentr‹ÚzipfileÚZipFileÚ extractallÚremover†ÚisdirÚrenamer r=rŒr�rŽrr�r�r{rrƒr�Ú$search_babel_translation_directoriesÚbabel_translation_directoriesÚ Exceptionr’)rpr“rgrhrtZ archive_urlr�Zcomponent_folderZ archive_pathr˜ÚchunkZzip_refr(Zold_folder_pathZnew_folder_pathr5r—rCr™r"ror#Úinstall_component_from_archiveês~   ÿÿ ÿ  0:8    üú   þ€ÿr®z5/install-requirments/cCs\tƒtj tj tj¡d¡}tj d|d¡}tj |¡r,|›d|›�}tj |ddd�dS)Nzvenv/binrzrequirements.txtz/python3 -m pip install -r T)ÚshellÚcheckzµRequirements installed successfully please wait installing requirments components... ) Úget_admin_menur„r…rAÚdirnameÚsysÚprefixÚisfiler‰Úrun)Zselected_component_nameÚ venv_bin_pathÚrequirements_fileZ pip_commandr"r"r#Úinstall_requirmentsCs  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)r„r…rµr1ÚreadÚ splitlinesrdr))r¸Z component_idsr˜rprgr"r"r#Úinstall_requirements_components\s  ÿÿ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   ¡t tj›d �¡}d S) NúLComponent not found úapi/add-to-menur~r&csg|] }| ¡ˆjvr|‘qSr")Ústripr)r+Úline©rCr"r#r-r.z'remove_dependencies..r/Fú/k2site/new_component2zXComponent successfully turn off )r r=r)r@rdr Údomainr1Ú readlinesÚ writelinesrƒrŽrr�)rpr(r5r˜ÚlinesZ updated_linesrgr"rÁr#Úremove_dependenciesos"   ÿ  ÿ rÇz'/add_dependencies/cCsxtj |¡}|s dSd}|j}t|dƒ� }| |¡Wdƒn1s$wYd|_tj  ¡t  t j ›d�¡}dS)Nr½r~r|TrÂzYDependencies added successfully ) r r=r)rr1r‹rƒrŽrr�rdr rÃ)rprCr5r—r˜rgr"r"r#Úadd_dependencies‰s   þ 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 r=r)r@r„r…rAr†ÚshutilÚrmtreerŽrÚdeleter�r¬r’rdr rÃ)rpr“rCr”r•r™rgr"r"r#Úremove_componentžs     €þrÌz/api/add-to-menucCsg}t tj›d�¡}| | ¡d¡| ¡dd}| ¡ddD]}d|d dd¡}|d}t|||ƒq$tj   ¡}d d „|Dƒ}|D]C}t tj›|›d�¡}|j d krŒ| | ¡d¡| ¡dd}| ¡ddD]}d|d dd¡}|d}t|||ƒqtqIqI|S) Nú/menu-admin-itemsrÚtitleÚchildrenÚk2itmÚtor;Ú-cSrGr"rHrIr"r"r#r-ærJzadd_to_menu..éÈ) rdr)r rÃr?rfÚreplaceÚadd_menu_with_permissions_dbr r=r>Ú status_code)ÚdatargÚ prev_menur,Ú name_menuÚ caption_menurrMr"r"r#Ú add_to_menuÛs,  ýrÛz/api/main-menu/c Cs¨tj ¡}dd„|Dƒ}d|vrt ¡}g}t tj›d�¡}t   |¡}|  ¡D]'}g}|dD]}d|d  dd ¡|vrC|  |¡q0|rO||d<|  |¡q(t|ƒS) NcSrGr"rHrIr"r"r#r-rJz"get_admin_menu..rKr¾rÏrÐrÑr;rÒ)r r=r>rZ get_role_idrdr)r rÃrZget_menu_items_by_rolesrfrÔr?r) rrMZrole_idZ filter_menurgZmenu_items_listr,Zfiltered_childrenZimr"r"r#r±ü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ÚÚmenurDÚcountZnew_menu_elementZ new_pravar"r"r#rÕs<ü  ó årÕú/component-addcsŽzt tj›d�¡}| ¡}dd„|Dƒ}Wnd}Ytj d¡‰g}ˆr1‡fdd„|Dƒ}n|}tj  ¡}dd„|Dƒ}t d|ˆ|d�S) NrYcSrZr"r"r*r"r"r#r-=r[z&component_add_dasb..r\csTg|]&}|drˆ ¡|d ¡vs&n  |dr$ˆ ¡|d ¡vrn q|‘qSr]r_rIrar"r#r-Es"ÿÿÿÿþÿýcSrGr"rHrIr"r"r#r-MrJzdashboard-add.html)rbr\rM) rdr)r rerfr rr r=r>r)rgrhrbrirrMr"rar#Úcomponent_add_dasb6s   ÿrìú/component-listcCstj ¡}td|d�S)Nzdashboard-list.html©r)r r=r>rrîr"r"r#Úcomponent_list_dasbTs  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ér"r"r#Ú menu_items^sþýÿ rñ)Cr¤Úflaskrrrrrrrr„rÉr Úk2cfgr Zk2compr Z flask_migrater rdr‰rr2Ú functoolsrr³Z k2admmenurrÚ sqlalchemyrÚflask_jwt_extendedrrÚ flask_loginrrrrÚ__name__Ú components_bpr3r1rRrŽr%r7ÚrouterErNrTrXrjrxrzršr®r¹r¼rÇrÈrÌrÛr±rÕrìrïrñr"r"r"r#Ús„(            &   B X     <   #