
    zi                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZ d dlZd d
l  d dl!m"Z" d dl#Zddl$m$Z$ d Z%e& e'd      d               Z(e)jU                  dd      d        Z+e)jU                  dd      d        Z,e)jU                  dd      d        Z-e)jU                  dd      d        Z.e)jU                  dd      d        Z/e)jU                  dd      d        Z0d  Z1d! Z2d"Z3 G d# d$ejh                  jj                        Z6y)%    N)OrderedDict)deepcopy)is_dataclass)isclass
isfunctionismethod	signature)time)uuid4)Responserequest)dumpsloads)*)	CMF_CACHE   )metricsc                     t         j                  r.t               t         j                  z
  dk  rt         j                  S t         j                  j                  d      } | s?t        t        t                           }t         j                  j                  d|d       n| j                         }|t         _        t               t         _        t         j                  S )N   redis_idT)nx)
APPREDIS_DB_IDr
   REDIS_DB_ID_TIMERREDIS_DBgetstrintsetdecode)raw_redis_idr   s     ./modules/api/views/index.pyget_redis_idr#      s    
46C$9$99A=<<##J/Ls46{# 	X$7&&(CO FC??    zCmfCache:flushdb)channelc                  n    d t         _        t        j                  d       t        j                  d       y )NzAPP.REDIS_DB_ID = NONE)r   r   logginginfogdebugargskwargss     r"   flush_redis_idr.   0   s'     CO LL)*GG$%r$   zjshash-invalidate-confirm/)	namespacec                 .    t        j                  |        y N)r   jshash_invalidate_confirm)confirm_dictr,   r-   s      r"   handle_messager5   >   s    ''5r$   user_regisrtyc                    ddl m}m} t        j                  dd|         t
        j                  rt        j                  j                  d       | j                  dd       }|r ||       t        j                  d| |       y )	Nr   	join_room
leave_room%szhandle_user_regisrty: r   user_idzMe registered: room)flask_socketior9   r:   r'   r(   configMETRICS_SOCKETIOr   socketio_user_regisrtywriter   socketioemitparamsr9   r:   r<   s       r"   handle_user_regisrtyrH   B   sj    4LL/x89&&,,Q/jjD)G'MMOG9-GM<r$   r9   c                    ddl m} t        j                  dd|          || d          t        j                  d| d         }t        t        |            }t        j                  rHt        j                  j                  d| d   	       t        j                  j                  || d   	       t        j                  d
| d    d| d    d|i| d   	       t        j                  d| d    || d   | d   | d   d| d   	       y )Nr   )r9   r;   zhandle_user_join_room: 	room_namer/   r0   r>   r   r=   zUser r<   z	 join to participantsz
Joined to 	user_name
user_login)rL   rM   rN   r<   )r?   r9   r'   r(   rD   get_participantslenlistr@   rA   r   socketio_join_roomrC   socketio_room_membersrE   )rG   r9   rL   participantsSizes       r"   handle_user_join_roomrU   N   s4   (LL09:f[!",,sAT,UL4-.""((1D(E%%++,<6+CV+W MME&+,If[6I5JKn^nMov|  ~I  wJM  KMM
VK()*){8K[abn[o  }C  DM  }N  	OK   r$   r:   c           	          ddl m} t        j                  dd|          || d          t        j                  d| d         }t        j                  dd	t        t        |            i| | d   
       y )Nr   )r:   r;   zhandle_user_leave_room: rJ   r/   rK   zUser leave roomrL   r=   )	r?   r:   r'   r(   rD   rO   rE   rP   rQ   )rG   r:   rL   s      r"   handle_user_leave_roomrW   d   sp    )LL1&:;vk"#,,sAT,ULMMO~s4;M7N&YRX&Y`fgr`sMtr$   document_broadcastc                 l    t         j                  d| | d   t        j                  j                         y )NrX   rJ   )r>   skip_sid)rD   rE   flaskr   sid)rG   s    r"   handle_document_broadcastr]   l   s+     MM&VK5HSXS`S`SdSdMer$   	user_pingc                     ddl m}m} t        j                  dd|         | j                  dd       }|rt        j                  d|        y y )Nr   r8   r;   zhandle_user_ping: r<   
user_pong_)r?   r9   r:   r'   r(   r   rD   rE   rF   s       r"   handle_user_pingra   q   sF    4LL+F845jjD)G
7),- r$   c                      i  fd}|S )Nc                      t        j                  | t        |j                               f      }|vr | i ||<   |   S r2   )pickler   sorteditems)r,   r-   hashfuncmemorys      r"   memozmemoized.<locals>.memo   sF    ||T6&,,.#9:;v00F4Ld|r$    )rh   rj   ri   s   ` @r"   memoizedrl   }   s    F
 Kr$   c                 `    dt         vrt               t         _        |t         j                  | <   y )Nprofiler_data)r)   r   rn   )keymss     r"   set_call_timerq      s!    a%-AOOCr$   z******c                   T    e Zd ZdZdd fdZddZddZddZd ZddZ	d Z
dd	Zd
 ZddZeddefd       Zd Zej&                  j(                  d        Z ej.                  d      ZddZd Zd Zd Zd Zd Zd Zd de fdZ!ej&                  j(                  d        Z" xZ#S )!ApiViewr/   c                 P    t         |           | j                  |      | _        y )N)extra_models_list)super__init__get_rpcrpc)selfru   	__class__s     r"   rw   zApiView.__init__   s!    <<2C<Dr$   c                 v    |r1|j                   j                  D cg c]  }|j                   c}|d<   |S c c}w )Nexception_types)r{   __mro____name__)rz   result	exceptione_clss       r"   _add_exception_infozApiView._add_exception_info   s6    ENEXEXE`E`(aE(aF$% )bs   6c                     t         j                  j                          t        j                  d||       d||dt
        j                  d      t
        j                  d}| j                  ||      S )Nz%s, exception=%s2.0)codemessagealert)jsonrpcerrorr   callidr   )	cmfapp_deferred_errors_checkr'   r   r)   r   
api_callidr   )rz   r   r   r   r   s        r"   _errorzApiView._error   s_    &&(('9="w7UU7^ll	
 '')'DDr$   c                    t         j                  j                          |sg }d|||t        j                  |t        j                  d      t        j                  d      t        j                  d      |t               |t               d}t        j                  rt        j                  |d<   |s%|s#t        j                  rt        j                  |d<   t        j                  rd|d	<   | j                  ||
      S )Nr   rn   r   note)r   r   metajsverr   jsurlrn   r   r   abortversion
invalidater   jscache_timelifeshow_bg_progressbarTlicense_requiredr   )r   r   r   r)   r   r   cmf_get_versionr#   r   r   api_license_requiredr   )rz   r   r   r   r   r   r   r   s           r"   _okzApiView._ok   s    &&(JllUU?3UU7^EE&M&($$
" )*););F%&Y1+@+@,-,A,AF()!!)-F%&'')'DDr$   c                 &    | j                  dd      S )NiDzParse errorr   rz   s    r"   parse_errorzApiView.parse_error   s    {{6=11r$   c                 D    d}| j                  d||      S | d|       S )NzInvalid Requestiz: r   )rz   r   titles      r"   invalid_requestzApiView.invalid_request   s/    !{{6GO5WWE7"WIAVWWr$   c                 &    | j                  dd      S )NizMethod not foundr   r   s    r"   method_not_foundzApiView.method_not_found   s    {{6#566r$   c                 ,    | j                  dd|       S )NizInvalid params: r   )rz   r   s     r"   invalid_paramszApiView.invalid_params   s    {{6%5gY#?@@r$   c                 &    | j                  dd      S )NizInternal errorr   r   s    r"   internal_errorzApiView.internal_error   s    {{6#344r$   c                 L    |t        ddd      v sJ | j                  |||      S )Ni ir   )ranger   )rz   r   r   r   s       r"   server_errorzApiView.server_error   s.    uVVR0000{{4I{>>r$   ru   c                 p   | sg } nt        |       } | j                  t        j                  j                         dj                  | D cg c]  }t        |       c}      }t        j                  j                  |      rt        j                  |   S i t        j                  |<   g t        t              | D ]a  }t        |      r|}t        |d|j                        }nlt        t        |d       xs t        t        j                  |d       }t        |      sct        |t        j                  j                        s|j                  r|dk(  rt!        g d      }n"|j"                  st!        |j$                        }i }t!        t        |            |z  }|D ]s  }t        ||      }t&        j)                  ||      }	t+        |	t,              }
t+        |	t.              }t+        |t0              }||j3                         |
||dd}|||d   <   u t        |t        j                  j                        r|j4                  j7                         D ]  \  }}g }t        |t        j4                  j8                  t        j4                  j:                  f      rg d}n(t        |t        j4                  j<                        rd	d
g}|D ]0  }| d| }t        ||      }||t?        |      ddddd|| d| <   2  |||d}|t        j                  |   |d   <   d t        j                  |   S c c}w )N 
class_name	BaseModel)
all_models_metaget_metaget_ui_full_pathubql2bqlpublic_get_ui_full_pathpublic_all_models_metapublic_nonepublic_none_classmethodsdesk_get_ui_full_pathsdesk_all_models_metaF)_methodnameis_class_methodis_static_methodis_taskis_field_methodr   )appendremoveextend
all_nestedr   r   .T)r   r   r	   r   r   r   r   )_classr   methods) rQ   r   r   modelsr   joinr   r   
rpc_modelsr   dirr   getattrr   
issubclassabstractr   	api_allowapi_methodsinspectgetattr_static
isinstanceclassmethodstaticmethodCmfDeferredJobWrapperlowerfieldsrf   CmfM2MCmfGenericM2MCmfJsonr	   )ru   objro   
model_nameclsapi_methods_setrpc_methodsmethod_namemethodmethod_attrr   r   r   
rpc_method
field_name	field_cls
submethods	submethodr   	rpc_models                       r"   rx   zApiView.get_rpc   s     " $%6 7  !5!56gg+<=Cs3x=>>>c">>#&& s<CK<*;< _	?Jz" $S,E
fj$7`73::z[_;`s|!#szz';';< <<
 [("% ' # ]]"%coo"6K "#c(mo=O. = k2%44S+F
 #-[+"F#-k<#H $V-BC
  &'--/'6(8&',
 3=Jv.//=2 #szz334-0ZZ-=-=-? )J	!#J!)cjj.?.?AYAY-Z[%Q
#Iszz/A/AB&.%9
 &0 	",Qyk:!(I!>'-$()26):/405',/3Dzl!I;$?@. "&I
 6?CNN3	& 12_	?@ ~~c""I >s   	L3c                     |dk(  S )N	qweqweqwerk   )rz   tokens     r"   check_tokenzApiView.check_tokenJ  s    ##r$   c                     t         j                  j                  dd      }|r(t        j                  d|      s| j                  dd      S | j                  d| j                  t              S )Nmr   z[a-zA-Z0-9_]+i  u   Недопустимые символы в параметре m. Разрешены только буквы, цифры и подчеркивания.z
index.html)ry   r   )	r   r,   r   re	fullmatchr   render_with_paramsry   r   )rz   m_params     r"   r   zApiView.getM  sb     ,,""3+2<<(8'B;;s  %}  ~  ~&&|&OOr$   z9"(?P<attr>(cmf|doc|obj|approved)_version)":(?P<value>\d+)c           	         t         j                  s|st        |t              rt	        |      dkD  r9t        dt	        |       dt        j                   t        j                         n|t	        |      dkD  rnt        j                  j                         t        j                  ddd      kD  r8t        d	t	        |       dt        j                   t        j                         | j                  |||||      }|rEt        j                  |      }	t!        j"                  | j$                  d
|	j'                               }	n0	 t)        |dd      }	t!        j"                  | j$                  d
|	      }	t         j                  s|st	        |	j/                  d            }|dkD  r\t        d| dt        j                   t        j                         t        j0                  d       | j3                  ||||||d      S |dkD  rt        j                  j                         t        j                  ddd      kD  r\t        d| dt        j                   t        j                         t        j0                  d       | j3                  ||||||d      S t5        |	d      S # t*        $ r}
t        j,                  d|
|        d }
~
ww xY w)Ni  u    !!!Блокирующая задача критикал баг! Обратитесь в техком!!! Используй slice u   , метод leveli,  i        uw   Разработчик внимание! Слишком много строк через API. Используй slice z"\g<attr>":"\g<value>"r   F)indentensure_asciiz"Json dumps error: %s | response=%szutf-8i   uh   !!!Блокирующая задача критикал баг! Обратитесь в техком!!! u    байт, метод uI   response_ok: повторный вызов из-за размера >10MBT)orjson_r   	recursioni   uq   Разработчик внимание! Слишком большой размер данных через API. uH   response_ok: повторный вызов из-за размера >1MBzapplication/json)mimetype)r@   
PRODUCTIONr   rQ   rP   	cmf_alertr)   
api_methodr'   WARNINGdatetimedatetodayr   cmfutil	cmf_dumpsr   sub_BIG_INT_JSON_HACK_REr    r   	TypeErrorr   encoder*   response_okr   )rz   result_dictr   r   r   r   r   r   response	json_dataeactual_sizes               r"   r  zApiView.response_okZ  s     +t,{#d*4474D3E]STS_S_R`b%oo/
 %+0C0C0EVZ\^`bHc0c 4474D3E]STS_S_R`b%oo/ 88KueZH ))(3It99;TV_VfVfVhiI!(15I	
 t99;TV_`I  i..w78K--~"m#9!,,I!//+ ij''T5%QXeo{'  A  A_,1D1D1FW[]_acId1d  H"m#9!,,I!//+ hi''T5%QXeo{'  A  A 	,>??=  BAxPs   J% %	K.KKc                 l   t         j                  ry t        j                  j	                  d      ry |j                  d      st         j                  d       y t        j                  j                         j                  d      d d t         j                  j                  j                  d}t        j                  rt        j                   j#                  d       t%        j&                  |t)        j*                  |            rt         j                  d       |d	   S t         j                  d
       y )NNO_CACHEjshash:z$api_cache_add failed, invalid jshash%Y%m%d%H%M%S%f)r   current_person_idr   zapi_cache_add endr   zapi_cache_add failed)r)   no_jscache_forceosenvironr   
startswithr*   r  utcnowstrftimecurrent_personidvaluer@   METRICS_API_CACHEr   api_cache_setrC   r   _obj_dict_setrd   r   )rz   rg   	res_caches      r"   api_cache_addzApiView.api_cache_add  s    ::>>*%y)GG:;&&--/889IJ3BO!"!1!1!4!4!:!:<	 ##!!''*""4i)@AGG'(W%%	&'r$   c                 R   t         j                  j                  d      ry |j                  d      sy t	        j
                  |      }|s0t        j                  rt        j                  j                  d       y t        j                  |      }t        j                  d|        |S )Nr  r  r   zAPI CACHE HIT )r  r  r   r  r   _obj_dict_getr@   r$  r   api_cache_missrC   rd   r   r'   r(   )rz   rg   _resress       r"   api_cache_getzApiView.api_cache_get  s}    ::>>*%y)&&t,''&&,,Q/ll4 ~dV,-
r$   c                 .     | j                   |g|i |S r2   full_cache_validationrz   jshash_list_args_kwargss       r"   public_full_cache_validationz$ApiView.public_full_cache_validation      )t))+IIIIr$   c                 .     | j                   |g|i |S r2   r0  r2  s       r"   sdesk_full_cache_validationz#ApiView.sdesk_full_cache_validation  r7  r$   c                 b   dt         j                   j                         j                  d      d d i}|D ]U  }|j                  d      st	        j
                  |      }|s-t        j                  |      }|j                  d      ||<   W | j                  |d d t        j                  d      S )Notherr  r  r  r   T)r   r   r   r   )r  r  r   r  r   r*  rd   r   r   r  r)   r   )rz   r3  r4  r5  r   jshash
redis_data
cache_datas           r"   r1  zApiView.full_cache_validation  s    8,,335>>?OPQTRTUV! 	9F$$Y/"008J#\\*5
!+!8v	9 TQWWVZ[[r$   c                 h    t         j                  r!t         j                  t         j                  k(  ryy)u;   
        Проверяем доступ к апи
        FT)r)   r!  anonymous_userr   s    r"   _check_accesszApiView._check_access  s&    
 1#3#3q7G7G#Gr$   r   c                    	 |j                  dd      \  }}|dk(  r	|dv rd| }|| j                  vry| j                  |   }|d   }d	}|d
v r|j                  s	|sd| }d}||d   vry|d   |   }||d<   ||d<   |S # t        $ r Y yw xY w)u  
        Поиск метода rpc

        находит метод в rpc_json
        проверяет его разрешенность
        возвращает указатель на функцию

        Возвращает не метод, а структуру из self.get_rpc + доп.поля:
         - use_simple - когда решили использовать slist или sget
         - _class - указатель на модель
        r   r   maxsplitNCmfAttachment)createupdatedeleteapi_r   F)r   rQ   sTr   _use_simple)split
ValueErrorry   disable_simple)rz   r   rN  proc_cls_nameproc_methodproc_clsr   
use_simples           r"   rpc_prepare_methodzApiView.rpc_prepare_method  s    	)/cA)F&M; O+<< $[M2(88M*x  
/)#2D2D^k]+KJhy11 y)+6 #H%/M"7  		s   B   	BBc                 *3   d t         _        | j                         s| j                  dd      S t         j                  j
                  rjt         j                  j
                  t        j                  k7  r?| j                  ddt         j                  j
                   dt        j                   d      S t         j                  dt         j                  j                  j                   d       t        j                  j                         }t        t        j                         }t         j                  dt        j"                   d	t        j$                   d
| d       t'        |t(              s| j+                         S |j-                  d      t         _        |j-                  d      t         _        |j-                  d      t         _        |j-                  d      t         _        t         j                  s8t5        ddt6        j8                         t;        t=                     t         _        d|vr| j?                  d      S |d   t         _         t         j2                  r8t7        jB                  dt         j@                   dt         jD                   d       |j-                  dd      }|t         _#        |j-                  d      xs i }|t         _$        tK        |jM                               }|j-                  d      xs i }tK        |jM                               }h d}|jO                  |      s|jO                  |      r(t        j"                  dk7  r| jQ                  d| d      S |j-                  d      xs g }	|	t         _)        |j-                  d       }
|
d!k(  r|j-                  d"      xs i }|r||d"<   |j-                  d#d       }|r||d#<   |j-                  d$d       }|r||d$<   |j-                  d%d       }|r||d%<   |j-                  d&d       }|r||d&<   |j-                  d'd       }|r||d'<   |j-                  d#g       t         _*        h d(}t         jT                  D ]3  }||v r|jW                  |       |d)z   |v s |jW                  |d)z          5 |t         _,        |j-                  d*i       t         _-        t         jZ                  j-                  d+      rt\        j^                  ja                          |j-                  d,d       }|r||d,<   | jQ                  d-      S t        jb                  rt         jd                  |d   |	|jg                         t         jZ                  d.}|d   ji                         D ]?  \  }}t'        |t:              stk        |      d/k\  s&d0tk        |       d|d d1  |d   |<   A tm        d2tn        jq                  |              |j-                  d3      }|j-                  d4d       }|j-                  d5      }|d   }g }|d6k(  r | jr                  |	i |S |d7k(  r | jt                  |	i |S |d8k(  r | jv                  |	i |S d }|j-                  d9d       }| jy                  ||      }|s| j{                         S |d:   }|d;   }|d<   } d=}!d>D ]  }"|"|d   v sd}!d=t         _>        t         j~                  j                  |j                         d?|d   v rkd=}#|
d!k(  r9r7|d@   dAk(  r/t'        |dB   t:              rt        j                  |dB   dC       d}#|r dA|v rt        j                  |dA   dC       d}#|r dD|v rt        j                  |dD   dC       d}#|rd"|v r|d"   d@   dAk(  r5t'        |d"   dB   t:              rt        j                  |d"   dB   dC       d}#|d"   d@   dDk(  r5t'        |d"   dB   t:              rt        j                  |d"   dB   dC       d}#|	r#dE|	d@   v rt        j                  |	d@   dC       d}#dF|d   k(  r	 g dG}$|$D ]  }%|%|d   v sd}# n |#st         j                  dH|d            n dI|d   v rd=}!|r|j-                  dJ      rd=}!t        |dKd=      rd=}!|j-                  dL      }&|j-                  dM      }'|'rt\        j                  j                          |'t         _G        |!r#|'!t5        dN| dt6        j8                         d=}!|!r||rt         j                  dO       nc|&r`t        j                  j                         }t         j                  dP       | j                  |'      }(t        dQt        j                  j                         |z
  j                  dRz         t         j                  dS       |(r|&|(j-                  dL      k(  ru|rt        j                  |      }t         j                  dT       t        j                  rt        j                  j                  dU       | j                  d d |(dL   || |V      S t        j                  rt        j                  j                  dU       t         j                  dW       |dX   s
|dY   s|dZ   rn|j-                  d[|!       })t         j@                  j                  d\      d]   d^k(  }*|
d!k(  rt         j                  d_       d"|v rmdA|d"   v rf|d"   d@   dAk(  r[t         j                  d`       t)               }+|d"   |+d"<   dAg|+d#<   |*|+da<    |j,                  di |+}tk        |d"         dbk(  r|d"= n|j-                  dA      s/r-t         j                  d`       |j-                  |dAg|*c      }n|r|dA|v rx|)r$t        j                  |j-                  dA             t)               }+dAdd|j-                  dA      g|+d"<   dAg|+d#<   |*|+da<    |j,                  di |+}|j                  dAd       n/|r3|jg                         }+g |+d"<   dAg|+d#<   |*|+da<    |j,                  di |+}n| j                  dedf      S tk        |	      d@k(  st'        |	d@   t:              rdE|	d@   vr| j                  dedg      S |	j                  d@      },|)rt        j                  |,       t)               }+dAdd|,g|+d"<   dAg|+d#<   |*|+da<   t         j@                  dhk(  r|+d#   j                  di       |dj   dkk(  r(t         j                  j                  t;        |,              |j,                  di |+}|dj   dkk(  rt        |      D ]  }-|j                  j-                  |-      }.|.s!|.j                  s1t5        dl|- dmt6        j8                  n       |j                  |-       ^t        |j                  |-   t        j                  j                        s||-   t        k(  st5        dot6        j8                  n       |j                  |-        |rv|)rtt        j                  |j                  j                         t        |dD      r?|j                  j                  s)t        j                  |j                  j                         |s5t         j                  dp       t                | j                  d i d |dqr      S t'        |t        j\                  j                        xr |j                  j                  }/t'        |t        j\                  j                        xr |j                  j                  }0t'        |t        j\                  j                        xr |j                  j                  }1t'        |t        j\                  j                        xr |j                  j                  }2t\        j^                  j                  |/|j                  |0|j                  j                  |1|ds|2d=t	      skt         j                  du       t\        j                  j                  ds|j                  |dvw       t                | j                  d i d |dxt               y      S t         j                  dz       d\|dj   v r|dj   j                  d\dU{      \  }}3t\        j^                  j                  |/|j                  ||0|j                  j                  |1|ds|2d=|
      skt         j                  d}       t\        j                  j                  ds|j                  |dvw       t                | j                  d i d |d~t               y      S t        ||      }4t        |4|3      }nt        ||dj         }t        dt        j                  j                         |z
  j                  dRz         t        j                  j                         }t         j                  d|d           	 |dZ   r|j                  |	|      }5n ||	i |}5t         j                  d       t        dt        j                  j                         |z
  j                  dRz         t        j                  j                         }|rG|j                  r;t         j                  d       	 |j                          t         j                  d       t        dt        j                  j                         |z
  j                  dRz         t        j                  j                         }t        d=       t        dt        j                  j                         |z
  j                  dRz         t        j                  j                         }|dj   dv r|5xr |5j                  j                  }5n*|dj   dkk(  r"t        |5dA      r|5j                  j                  }5t        j                  |5|      }:t         j                  d       | r|:j                          n|:j                          t        dt        j                  j                         |z
  j                  dRz         |:j                  |:j                   }<};|dj   dv r|<rd}=t'        |<t(              r|<j-                  d      dk(  rdv}=|j                  dk(  s|=dvk(  rt'        |<t(              r1t\        j                  j                  ds|j                  |<dA   |=w       nQt        |<      r8t\        j                  j                  ds|j                  |<j                  |=w       nt        |<d      |dj   dv rd}=d=}>d=}?|<D ],  }@t'        |@t(              r@j-                  dd       dk(  rd}>+d}?. |>r|?rd}=n|>rdv}=|j                  dk(  s|=dvk(  r,t\        j                  j                  ds|j                  |=       t        d|:j                         t         j                  d       t        j                  j                         }|!r#t        t         dd       s| j	                  |'      }&|rt        j                  |      }	 | j                  |<|;|&|||       }At        dt        j                  j                         |z
  j                  dRz         t        j                  rȐt               t         j                  z
  }Bd }C|d   dhk(  rx|dhz
  }D|Dst         j                  d       d}CnXtk        D      dUkD  rt         j                  dD        d}Cn/t        D      d@   j                  d      rd}Cnt        D      d@   }Ct        j                  |d   t        BdRz        C       t         j                  d       AS # t        $ r}6t                t7        j                  d       t;        |6      }7t'        t        |6dd       t        t        f      r8dj                  |6j                  D 8cg c]  }8t;        |8       nc c}8w c}8      }7| j                  d i d ||7|6y      cY d }6~6S d }6~6wt        $ rg}6t        j                  j                  d       t                d|d    d}9|9t        j                         z  }9| j                  d|9|6      cY d }6~6S d }6~6ww xY w# t        $ r}6t                t7        j                  d       t;        |6      }7t'        t        |6dd       t        t        f      r8dj                  |6j                  D 8cg c]  }8t;        |8       nc c}8w c}8      }7| j                  d i d ||7|6y      cY d }6~6S d }6~6ww xY w# t
        $ r!}6t         j                  d| d|<         d }6~6ww xY w)Ni  u   Нет правu>   Версия Eva отличается от версии БД: z != u   . Вероятно была запущен несовместимый образ Eva, либо были проблемы во время обновления и патчи применились частично.zAPI request start ()zrequest.remote_addr=z request.url=z
 json_res= session_tab_idcomponent_idr   TECHCOM_HACK3441zAPI: No callid specifiedT)
devel_onlyr   r   zNo method specifiedr;   z TECHCOM_HACK3441r   r   r-   save_kwargs>   auditnotify	only_dataz	127.0.0.1u!   SPEC0 Использование u#    через API запрещено.r,   r   r   filterr   sliceorder_bygroup_byinclude_deleted>   systemis_dummy
user_localis_templateperm_encryptvacation_endsl_owner_lockperm_parent_idvacation_startimport_originalperm_inherit_acl_idperm_parent_owner_idperm_effective_acl_id%perm_security_level_allowed_ids_cache_idflags
admin_modeno_cacheu)   no_cache запрещен go to spec0 osv)loginr   r,   r-   rs     zLONG_STRING    z
API_TRACE 
no_jscacheno_metacache_idzCache.full_cache_validationz"Cache.public_full_cache_validationz!Cache.sdesk_full_cache_validationrN  r   r   rK  F)z.get_getz.list_listz.select_selectz.sum_sumz.count_countz.max_maxz.min_minr   r   r"  r   )readr   :zCmfPersonVar.get)get_current_userget_settingsCmfRFilezCmfPersonVar.get_metaCmfMenuTreez+Possible cache return invalid_data: method=r  search_stringTEXKOM_no_cacher   r<  ur   ошибка на frontend методы list get и тп должны быть с jshash, кроме тестов z$api_cache_get skip due to no_jscachezapi_cache_get startr.  i  zapi_cache_get endzapi_cache_get hit!r   )r  r   r   r   r   r   zapi_cache_get jsver mismatch!r   r   r   
for_updater   r   restorezAPI object get startu~   deprecated id объекта нужно передавать в kwargs или может вообще параметром RPCcmf_deleted   )r_  r   ra  r  z==i  u   Необходимо указать filter или kwargs для получения объекта перед вызовом его методаu1   Необходимо указать id в args[0]zCmfTask.updatere  r   rG  u	   Поле u1    не доступно для изменения.r   uB   Не задано новое значение для пароля.zAPI object get Noneu>   Объект не найден, возможно удалён.)r   r   r   r   r   r  )	initial_acl_keyobject_modelobject_owner_id	object_idobject_parent_idobject_instanceaccess_levelperm_security_level_allowed_idsraise_errorzAPI object access prohibitedfail)operatecmf_model_nameparentresult_statusuE   Объект недоступен: недостаточно прав.)r   r   r   r   r   r   zAPI object get endrC  )
r  r  object_fieldr  r  r  r  r  r  r  z"API object field access prohibiteduQ   Поле объекта не доступно: недостаточно прав.preparezAPI method start r+   zUserError Trace:	Exceptionu/   Ошибка выполнения метода z

ir   zAPI method endcall_method_mszAPI save startzAPI save endsave)synccommit)rF  upsertcreate_from_template)rz  zAPI json dump startresult_to_dict_ms)r   sgetok_acl_objdenyCmfAuditz$get result must be dict or dataclass)rQ   slist	partially)r  r  r  number_of_objectszAPI json dump endcache_store_error)r   r   uQ   Ошибка конвертации результата запроса json_res=z result_dict=result_to_response_msuh   Metrics. Warning: не смогли распарсить список обновляемых полей.unknownuT   Metrics. Warning: у задачи обновлено множество полей: manycf_cf)r   duration_msadditional_labelzAPI request endrk   )r)   r   rA  r   global_settingseva_versionr@   EVA_VERSIONr*   r!  r   r#  r  nowr   r   dataremote_addrurlr   dictr   r   rW  rX  rY  r  r'   r  r   r   r   r  r(   current_userr   
api_kwargsr   keysintersectionr   api_args
api_fieldsr   api_hack_fieldsrs  r   CmfAccessListactivate_admin_mode	API_TRACErv  copyrf   rP   printjsonr   r1  r6  r9  rS  r   in_memory_cachein_memory_cache_skip_modelsr   r   r	  cache_obj_lock_getr   
CmfLicenselicense_api_notifyr<  r.  rq   microsecondsr   jshash_invalidate_confirm_listr$  r   api_cache_hitrC   r  api_cache_miss_jsverrL  popskipcache_select_for_updateaddrQ   r   r   r   r   CmfPassword_PASSWORD_MASKr"  hasattrvirtualcmf_rollbackr   	CmfEntityrp  CmfModelcmf_owner_id	parent_idrq  oldcheck_accessr  audit_eventCmfPermissionErrorapply_asyncCmfUserErrorr   tupler   r,   r  r   logger	traceback
format_excr   
is_changedr  
cmf_commitCmfResultSplittersplit_simpler   r   r   r  r  r(  rM  METRICS_API_STATS_COLLECTr
   debug_startr  write_api_timingsr   )Erz   
start_datejson_resr   r-   
kwargs_setr[  save_kwargs_setblock_kwargsr,   jsonrpc_ver_filterr   r`  ra  rb  rc  r  r   ru  
trace_datakvry  rz  r{  r   invalidate_listr   rN  rP  r   rR  api_use_cacherJ  cache_lock_ok_cachelock_skip_methodsr   r   r<  r>  r  r  
tmp_kwargsr"  argfieldr  obj_owner_idobj_parent_idrq  field_method	obj_fieldr   r  	abort_msgimsgsplitterr   r  check_result_statuscheck_result_have_denycheck_result_have_ok_objrespmetric_durationmetric_additional_labelupdate_fieldssE                                                                        r"   postzApiView.post   s   !!#;;s$566 ((!!--1C1CC;;s&defevev  fC  fC  eD  DH  IO  I[  I[  H\ \U %V W W 	
%a&6&6&;&;&A&A%B!DE&&**,
&	&w':':&;=U_`h_iijkl(D)##%%#<<(89!n5||H-%\\*<=||*w8 uw<AL8#''(=>>) LL!,,q0@@QRSWb)h'-2'
jj/52k..017""<0O4P4PQ]4^""k1**-N|n\  ,A  B  B||F#)r
ll9-%ll8,2G#*x \\(D1F#)x LL$/E"'w||J5H%-z"||J5H%-z"&ll+<dCO,;()zz(B/k ,, 	9J_,&&z2%?2&&z%'78		9
 , ,,w+77;;|$  446<<
D1!)F:&&'RSS "8, ++-J #8,224 P1a%#a&C-0<SVHAagY.OJx(+P Jtzz*5678 \\,/
,,y$/<<
+(# 22-4--t>v>>994444dEfEE883433TDVDD!&6=--fnE((**Y'(# /

 D 8	A HX&& $ %*!--44S^^D
 HX..$)M"e+GAJ$<NS]^efg^hjmSn2271:D2I(,$&.226$<d2K(,&F"2226&>2M(,(f"4!(+A.$6:fXFVWXFY[^;_#66vh7G7JQU6V,0M!(+A.&8ZxHXYZH[]`=a#66vh7G7JQU6V,0MtAw22472F(,)Xh-??/+ 5 " 22,0M!"
 )"MhW_N`Ma bcq8	r (!33!Mfjj1!M 3)51!MW%h' 002 V^ E  FN  EO  Pw8 "M >?%..224
-.!//7
o0A0A0E0E0G*0T/b/bei/ij+,
w 77#.7.V.VW_.`O 45!33#1177:#//(,4",W"5"'$.'6  0  8 8 "33#88>>qA ?@()[9K-LP[\ePf  Lm2CDJ,,,,S1"5BKe#./v%$&2B*BvhGWXYGZ^bGbGG  ]  ^!%J+1(+;Jx(,06Jx(0;J}-!#''/J/C6(+,1"8,D)gGG  ]  ^''$(`k'lC!226::d3CD!%J,0$

48H+IJx(,06Jx(0;J}-!#''/J/CJJtR(!'J+-Jx(,06Jx(0;J}-!#''/J/C;;s -E F F t9>DGS)APTUVPW;;s,_``XXa[..r2!V
(,dB'7
8$(,v
8$,7
=) <<#33x(//
;v&(21155c"g>cgg+
+6"h.< 
,CJJNN3/E$%	#6g&hpwpp  A"JJsO'

39O9OPU[\_U`drUr%(jsz  tC  tC  D"JJsO
, z**366<<8 3'0@0@..sxx~~>-.xxbEZ   \ \ )cjj.B.BCgHaHaHgHgO%c3::+>+>?ZCDTDTDZDZL&sCJJ,?,?@XS]]EXEXM4>sCJJDXDX4Y  5L^a  _H  _H  _L  _L1''44$3#..bn!ffll]\_!'4Ygl	 5 n
 67++F3>>be:@ , BxxbEam  nB   C C GG()k&))+6v+>+D+DSST+D+U(
L++88(7%(^^*^j"%&&,,`c%+8]kp 9 r GG@AOO//s~~fi>D 0 F N88#"Dq  ~P  ~R $ S S $C4	 L9
 !k&&9:i("3"3"7"7"9J"F!T!TW[![\&&**,
	#HX$6#789	?9%++f+E00. 	
 !&):):)>)>)@:)M([([^b(bc&&**,
3>>GG$%
a
 GGN#fx00446CQQTXXY&&**,
h!2!2!6!6!8:!E S SVZ Z[&&**,
 v"NN/		F H,vt$,,VW,E	%&!!#NN)H,=,=,A,A,Cj,P+^+^ae+ef$MM8??k v/1k"&+t,1LPV1V&,# ~~+/Bf/Lk40OO// &s~~*40@S 0 U "+.OO// &s~~*~~=P 0 R $K1WXXv"33"&%*"#(  $ 0dD)dhhz4.HF.R-1*+/(	0
 &*>&1#'&,# ~~+/Bf/L++F3>>:M , O 	)8+E+EF	#$&&**,
 ,?!F&&v.E'FFxPO	##KueP_is#tD 	-0A0A0E0E0G*0T/b/bei/ij
 ++"fq}}4O&*# !%55 *m_ <$GG  G  H.7+'!+GGr  tA  sB  C  D.4+-(+66u=.2+.2=.A!.D+%%Xh-?SQ`aeQeMf  zQ  R	!"q  	]N01AI'!VT2T5MBHHaff%=c!f%=%=>	88"DYZ[  ] ]  	?JJ  -NCHXDVCWW[\C9''))C$$VSA$>>	?   a!!"45F	ga6uF #!&&)AQ#a&)A)A BIxxbE^_   a aa|  	GGghpgqq~  @K  L  M  N	s   G:!A^ J*Ab7 YAe' ^	Ab4^"A$Aa`A`
`#Aa`;Ab4aAb4aAAb/b)Ab4b/Ab4b7	Ae$c A$Aed$Ad7
d6#AeeAe$eAe$e'
Afe1AffAfr2   )returnN)NNN)r   )FNF)F)$r   
__module____qualname____url__rw   r   r   r   r   r   r   r   r   r   r   rQ   rx   r   r   viewsactionr   r   compiler  r  r(  r.  r6  r9  r1  rA  r   rS  r  __classcell__)r{   s   @r"   rs   rs      s    GE	EE:2X7A5? k#$ k# k#Z$ 	YYP P 'BJJ'cd;@z(&JJ	\* *X 	YYi ir$   rs   )7decimal	ipaddressr'   sysr  rd   stringrandomr   r  collectionsr   r  r   dataclassesr   r   r   r   r   r	   r
   uuidr   r[   r   r   ujsonr   r   
cmf.modelsr   cmf.includecmf.appr   cmf.util.metricsr   r#   r   on_server_eventr.   rD   onr5   rH   rU   rW   r]   ra   rl   rq   r  r  BaseViewrs   rk   r$   r"   <module>r,     si      
     	  #  $ < <   #      ( +,& - & 
(C86 96 
_,	= -	= 
[C( )* 
\S)u *u 
!S1f 2f 
[C(. ). Ycii   Yr$   