
    ¾gk                     j    d dl  d dlmZmZ d dlZd dlZ G d de      Z G d dee      Z	d	 Z
d
 Zy)    )*)abortResponseNc                   $     e Zd Z fdZd Z xZS )BaseViewMetac                   
 t         t        |   | |||      
|d   }|j                  dd       s
S |j	                  d      s"|j	                  d      s|j	                  d      r|j                  d      d   }|dvr |d   j	                  d	      sd
|z   |d   z   }n|d   }|
_        |dz   |z   }| j                  | |      
_        t        j                  ||
fdg d       g 
_        
j                  j                         D ];  \  }}	t        |	d      s
j                  j                  |j!                                = 
S t#        d      )N
__module____url__zcmf.modulesmodulescustom.)index
confluencejiraz/pub//c                  2             j                   | i |S N)dispatch)argskwargs	new_classs     ./cmf/views/base_view.py<lambda>z&BaseViewMeta.__new__.<locals>.<lambda>$   s    (<	(<(<d(Mf(M     )GETPOSTPUT)methodscmf_is_actionuq   Вьюхи можем определять только в modules и переопределять их в custom)superr   __new__get
startswithsplitreal_url_create_jinja_env	jinja_envAPPadd_url_rulecmf_action_list__dict__itemshasattrappendupper	Exception)mclnamebasesnmspcmodule_pathmodule_nameurlendpointaction_nameaction_methodr   	__class__s             @r   r"   zBaseViewMeta.__new__   st   ,4S$uM	L) yyD) ""=1%%i0%%h/%++C04K"AA%PYJZJeJefmJnK'%	*::I&!$I"S(4/H"%"7"7["IIM.	   )+I%.7.@.@.F.F.H J*]=/:--44[5F5F5HIJ 	  D r   c           
      d  
 t               }t        j                  dj                  |      dj                  |      ddj                  |      ddfD cg c]&  }t        j
                  j                  t        |      ( c}      }||d<   t        j                  di |}dd	l	m
}m} dd
lm}m
m}	 |j                   j#                  t$        j&                  j                          |j                   j#                  ||t(        |
|	
fd       t$        j&                  j*                  |_        |S c c}w )Nzcustom/{}/templateszmodules/{}/templateszcommon/templateszcmf/modules/{}/templateszcmf/templatesz./loaderr   )url_forget_flashed_messages)requestsessiongc                       j                  d      r@t        j                  dj                  t        j
                  j                                     S dS )N
csrf_tokenz2<input name="csrf_token" type="hidden" value={} /> )r#   flaskMarkupformatcmfviewsget_csrf_token)rB   s   r   r   z0BaseViewMeta._create_jinja_env.<locals>.<lambda>T   sI    
 {{<(  %||DKKII,,.    r   )r?   r@   configrA   rB   rC   rE    )dictjinja2FileSystemLoaderrI   ospathjoinPROJECT_DIREnvironmentflask.helpersr?   r@   flask.globalsrA   rB   rC   globalsupdater)   r(   rM   filters)clsr7   optionsdirjinja_loaderrvr?   r@   rA   rC   rB   s             @r   r'   zBaseViewMeta._create_jinja_env3   s   & .. *00=*11+>&.55kB#
 [#.

 )*'*?55


#--//0


!5 	 	
  ]]**
	G
s   +D-)__name__r	   __qualname__r"   r'   __classcell__)r<   s   @r   r   r      s    )V+r   r   c                       e Zd Zd Zd Zd Zy)BaseViewc                 P   t         j                  d   j                         }dt         j                  v r!t         j                  d   j                         }dt         j                  v r!t         j                  d   j                         }dt         j                  v r!t         j                  d   j                         }|dv r/|t         j                  d   j                         k7  rt	        d       || j
                  v r  t        | |j                               |i |S t	        d       y )NREQUEST_METHOD_methodmethodaction)r   r   r   HEADi  )rA   environr0   valuesr   r+   getattrlower)selfr   r   ri   s       r   r   zBaseView.dispatchb   s    !1288:&^^I.446Fw~~%^^H-335Fw~~%^^H-335F33'//RbBcBiBiBk8k #JT)))0740$A&AAc
r   c                 \    | j                   j                  |      } |j                  di |S )NrN   )r(   get_templaterender)rp   tempalte_namecontexttemplates       r   render_with_paramszBaseView.render_with_paramss   s*    >>..}=x)))r   c                 @   |s|rt        d      	 i t        j                  d      d   j                  }j	                  |j
                         j	                  |j                         fd} |dd        |dd	        |d
d        | j                  |fi S )Nu@  
Функция self.render() берет окружение из текущего view
Не используйте"

self.render("example.html", qwe="qwe")

Используйте:

qwe="qwe"
self.render("example.html")

Пример:

=== view ===

@cmf.views.action
def get(self):
    qwe="qwe"
    return self.render("example.html")

=== example.html ===

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    {{ qwe }}
</body>
</html>

 r   )ru      c                 &    | v r|    |<   | = y y r   rN   )oldnewnamespace_paramss     r   
rename_keyz#BaseView.render.<locals>.rename_key   s)    &&(8(= %$S) 'r   rp   	view_selfr   	view_argsr   view_kwargs)r1   inspectstackframerZ   	f_globalsf_localsrw   )rp   rt   r   r   
view_framer~   r}   s         @r   rs   zBaseView.renderw   s    6"$ $J 	^
  ]]1]-a066

 4 45
 3 34	* 	6;'6;'8]+&t&&}I8HIIr   N)ra   r	   rb   r   rw   rs   rN   r   r   re   re   a   s    "*<Jr   re   )	metaclassc                     d| _         | S )NT)r    )fs    r   rj   rj      s    AOHr   c                        fd}|S )Nc                       fd}|S )Nc                  R    rt         j                  vrt        d        | i |S )Ni  )rA   ri   r   )r   r   r   r   s     r   wrapperz-methods.<locals>.real_action.<locals>.wrapper   s(    7>>8c
d%f%%r   rN   )r   r   r   s   ` r   real_actionzmethods.<locals>.real_action   s    	&
 r   rN   )r   r   s   ` r   r   r      s     r   )cmf.includerG   r   r   uuid	tracebacktyper   objectre   rj   r   rN   r   r   <module>r      s=     !  W4 WtRJv RJv
	r   