
    X(i                     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           
      t  
 dt         j                  i}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 )N
autoescapez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)rC   s   r   r   z0BaseViewMeta._create_jinja_env.<locals>.<lambda>W   sI    
 {{<(  %||DKKII,,.    r   )r@   rA   configrB   rC   rD   rF    )r)   select_jinja_autoescapejinja2FileSystemLoaderrJ   ospathjoinPROJECT_DIREnvironmentflask.helpersr@   rA   flask.globalsrB   rC   rD   globalsupdater(   rN   filters)clsr7   optionsdirjinja_loaderrvr@   rA   rB   rD   rC   s             @r   r'   zBaseViewMeta._create_jinja_env3   s    #55
 .. *00=*11+>&.55kB#
 [#.

 )*'*?55


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


!5 	 	
  ]]**
	G
s   +D5)__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  )rB   environr0   valuesr   r+   getattrlower)selfr   r   rj   s       r   r   zBaseView.dispatche   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 )NrO   )r(   get_templaterender)rq   tempalte_namecontexttemplates       r   render_with_paramszBaseView.render_with_paramsv   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   )rv      c                 &    | v r|    |<   | = y y r   rO   )oldnewnamespace_paramss     r   
rename_keyz#BaseView.render.<locals>.rename_key   s)    &&(8(= %$S) 'r   rq   	view_selfr   	view_argsr   view_kwargs)r1   inspectstackframer[   	f_globalsf_localsrx   )rq   ru   r   r   
view_framer   r~   s         @r   rt   zBaseView.renderz   s    6"$ $J 	^
  ]]1]-a066

 4 45
 3 34	* 	6;'6;'8]+&t&&}I8HIIr   N)rb   r	   rc   r   rx   rt   rO   r   r   rf   rf   d   s    "*<Jr   rf   )	metaclassc                     d| _         | S )NT)r    )fs    r   rk   rk      s    AOHr   c                        fd}|S )Nc                       fd}|S )Nc                  R    rt         j                  vrt        d        | i |S )Ni  )rB   rj   r   )r   r   r   r   s     r   wrapperz-methods.<locals>.real_action.<locals>.wrapper   s(    7>>8c
d%f%%r   rO   )r   r   r   s   ` r   real_actionzmethods.<locals>.real_action   s    	&
 r   rO   )r   r   s   ` r   r   r      s     r   )cmf.includerH   r   r   uuid	tracebacktyper   objectrf   rk   r   rO   r   r   <module>r      s=     !  Z4 ZzRJv RJv
	r   