
    Y~h                        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 m!Z!m"Z" d dl#T d dl$m%Z% d Z&e' e(d          d                         Z)e*+                    dd          d             Z,e*+                    dd          d             Z-e*+                    dd          d             Z.e*+                    dd          d             Z/e*+                    dd          d             Z0e*+                    dd          d             Z1d Z2d  Z3d!Z4 G d" d#ej5        j6                  Z7dS )$    N)OrderedDict)deepcopy)is_dataclass)isclass
isfunctionismethod	signature)time)uuid4)Responserequest)dumpsloads)commit_all_dsrollback_all_ds)*)	CMF_CACHEc                     t           j        r+t                      t           j        z
  dk     rt           j        S t           j                            d          } | sKt          t          t                                          }t           j                            d|d           n| 	                                }|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    
 466C$99A==<##J//L 
)s466{{## 	X$7777&&((CO FFC?    zCmfCache:flushdb)channelc                  z    d t           _        t          j        d           t                              d           d S )NzAPP.REDIS_DB_ID = NONE)r   r   logginginfogdebugargskwargss     r"   flush_redis_idr.   /   s7     CO L)***GG$%%%%%r$   zjshash-invalidate-confirm/)	namespacec                 .    t          j        |            d S N)r   jshash_invalidate_confirm)confirm_dictr,   r-   s      r"   handle_messager5   =   s    '55555r$   user_regisrtyc                     ddl m}m} t          j        dd|             |                     dd           }|r ||           t                              d| |           d S )Nr   	join_room
leave_room%szhandle_user_regisrty: user_idzMe registered: roomflask_socketior9   r:   r'   r(   r   socketioemitparamsr9   r:   r<   s       r"   handle_user_regisrtyrE   A   s    44444444L888999jjD))G 	'MM-G--GM<<<<<r$   r9   c                    ddl m} t          j        dd|              || d                    t          j        j                            d| d                   }t          t          |                    }t          
                    d| d	          d
| d          d|i| d                    t          
                    d| d          || d         | d         | d	         d| d                    d S )Nr   )r9   r;   zhandle_user_join_room: 	room_namer/   r0   r>   zUser r<   z	 join to participantsr=   z
Joined to 	user_name
user_login)rI   rJ   rK   r<   )r@   r9   r'   r(   rA   servermanagerget_participantslenlistrB   )rD   r9   rI   participantsSizes       r"   handle_user_join_roomrR   K   s@   ((((((L999:::If[!"""?*;;cPVWbPc;ddL4--..MMK&+KKf[6IKKn^nMov|  ~I  wJM  K  K  KMM*VK(**){8K[abn[o  }C  DM  }N  	O  	OK       r$   r:   c           	      >   ddl m} t          j        dd|              || d                    t          j        j                            d| d                   }t                              dd	t          t          |                    i| | d         
           d S )Nr   )r:   r;   zhandle_user_leave_room: rG   r/   rH   zUser leave roomrI   r=   )r@   r:   r'   r(   rA   rL   rM   rN   rB   rO   rP   )rD   r:   rI   s      r"   handle_user_leave_roomrT   \   s    ))))))L:&::;;;Jvk"###?*;;cPVWbPc;ddLMM$~s4;M;M7N7N&YRX&Y`fgr`sMtttttr$   document_broadcastc                 l    t                               d| | d         t          j        j                   d S )NrU   rG   )r>   skip_sid)rA   rB   flaskr   sid)rD   s    r"   handle_document_broadcastrZ   d   s1     MM&VK5HSXS`SdMeeeeer$   	user_pingc                     ddl m}m} t          j        dd|             |                     dd           }|rt                              d|            d S d S )Nr   r8   r;   zhandle_user_ping: r<   
user_pong_r?   rC   s       r"   handle_user_pingr^   i   s{    44444444L4F44555jjD))G .,7,,-----. .r$   c                      i  fd}|S )Nc                      t          j        | t          |                                          f          }|vr | i ||<   |         S r2   )pickler   sorteditems)r,   r-   hashfuncmemorys      r"   memozmemoized.<locals>.memox   sT    |T6&,,..#9#9:;;v4000F4Ld|r$    )re   rg   rf   s   ` @r"   memoizedri   u   s.    F     
 Kr$   c                 f    dt           vrt                      t           _        |t           j        | <   d S )Nprofiler_data)r)   r   rk   )keymss     r"   set_call_timern      s*    a%--AOCr$   z******c                   :    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/   Nreturnc                 ~    t                                                       |                     |          | _        d S )N)extra_models_list)super__init__get_rpcrpc)selfrs   	__class__s     r"   ru   zApiView.__init__   s3    <<2C<DDr$   c                 <    |rd |j         j        D             |d<   |S )Nc                     g | ]	}|j         
S rh   )__name__).0e_clss     r"   
<listcomp>z/ApiView._add_exception_info.<locals>.<listcomp>   s    (a(a(aE(a(a(ar$   exception_types)ry   __mro__)rx   result	exceptions      r"   _add_exception_infozApiView._add_exception_info   s/     	b(a(aYEXE`(a(a(aF$%r$   c                     t          j        d||           d||dt                              d          t          j        d}|                     ||          S )Nz%s, exception=%s2.0)codemessagealert)jsonrpcerrorr   callidr   )r'   r   r)   r   
api_callidr   )rx   r   r   r   r   s        r"   _errorzApiView._error   s^    ('9==="w77UU7^^l	
 
 '')'DDDr$   c                    |sg }d|||t           j        |t                               d          t                               d          t                               d          |t                      |t	                      d}t           j        rt           j        |d<   |s|st           j        rt           j        |d<   t           j        rd|d	<   |                     ||
          S )Nr   rk   r   note)r   r   metajsverr   jsurlrk   r   r   abortversion
invalidater   jscache_timelifeshow_bg_progressbarTlicense_requiredr   )	r)   r   r   cmf_get_versionr#   r   r   api_license_requiredr   )rx   r   r   r   r   r   r   r   s           r"   _okzApiView._ok   s     	JlUU?33UU7^^EE&MM&(($$
 
"  	<)*);F%& 	BY 	B1+@ 	B,-,AF()! 	.)-F%&'')'DDDr$   c                 .    |                      dd          S )NiDzParse errorr   rx   s    r"   parse_errorzApiView.parse_error   s    {{6=111r$   c                 D    d}|                      d||n| d|           S )NzInvalid Requestiz: r   )rx   r   titles      r"   invalid_requestzApiView.invalid_request   s1    !{{6GO55EAVAVWAVAVWWWr$   c                 .    |                      dd          S )NizMethod not foundr   r   s    r"   method_not_foundzApiView.method_not_found   s    {{6#5666r$    c                 4    |                      dd|           S )NizInvalid params: r   )rx   r   s     r"   invalid_paramszApiView.invalid_params   s    {{6#?g#?#?@@@r$   c                 .    |                      dd          S )NizInternal errorr   r   s    r"   internal_errorzApiView.internal_error   s    {{6#3444r$   c                 \    |t          ddd          v sJ |                     |||          S )Ni ir   )ranger   )rx   r   r   r   s       r"   server_errorzApiView.server_error   s7    uVVR000000{{4I{>>>r$   rs   c                 n   | sg } nt          |           } |                     t          j        j                   d                    d | D                       }t          j                            |          rt          j        |         S i t          j        |<   g t          t                    | R D ]r}t          |          r|}t          |d|j                  }nit          t          |d           pt          t          j        |d           }t          |          slt          |t          j        j                  s|j        r|dk    rt          g d          }n|j        st          |j                  }i }t          t          |                    |z  }|D ]}t          ||          }t$                              ||          }t)          |t*                    }	t)          |t,                    }
t)          |t.                    }||                                |	|
|dd}|||d         <   t          |t          j        j                  r|j                                        D ]\  }}g }t          |t          j        j        t          j        j        f          rg d	}n#t          |t          j        j                  rd
dg}|D ]8}| d| }t          ||          }||t=          |          ddddd|| d| <   9|||d}|t          j        |         |d         <   tt          j        |         S )Nr   c                 ,    g | ]}t          |          S rh   r   )r}   objs     r"   r   z#ApiView.get_rpc.<locals>.<listcomp>   s    ===Cs3xx===r$   
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)rP   r   cmfmodelsr   joinr   
rpc_modelsr   dirr   getattrr|   
issubclassabstractr   	api_allowapi_methodsinspectgetattr_static
isinstanceclassmethodstaticmethodCmfDeferredJobWrapperlowerfieldsrc   CmfM2MCmfGenericM2MCmfJsonr	   )rs   rl   
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"   rv   zApiView.get_rpc   s     	8 " $%6 7 7  !5666gg==+<===>>>c"" 	'>#&& s<CKK<*;<< _	? _	?Jz""  $S,EE

fj$77`73:z[_;`;`s|| !#sz';<<  < 
 [(("% ' ' ' # # ] 7"%co"6"6K "#c((mmo=O. = = k22%44S+FF
 #-[+"F"F#-k<#H#H $V-BCC
  &'--//'6(8&', 
 3=Jv.//#sz344 -0Z-=-=-?-?  )J	!#J!)cj.?AY-Z[[ :%Q%Q%Q

#Isz/ABB :&.%9
 &0  	",::y::!(I!>!>'-$()26):):/405',/3D Dz$?$?I$?$?@@ "& I
 6?CN3	& 122~c""r$   c                     |dk    S )N	qweqweqwerh   )rx   tokens     r"   check_tokenzApiView.check_token@  s    ##r$   c                 F    |                      d| j        t                    S )Nz
index.html)rw   r   )render_with_paramsrw   r   r   s    r"   r   zApiView.getC  s    &&|&OOOr$   z9"(?P<attr>(cmf|doc|obj|approved)_version)":(?P<value>\d+)Fc           	         t           j        s|st          |t                    rt	          |          dk    r9t          dt	          |           dt          j         t          j	                   nt	          |          dk    rnt          j                                        t          j        ddd          k    r8t          d	t	          |           dt          j         t          j	                   |                     |||||          }|rHt                              |          }	t!          j        | j        d
|	                                          }	nX	 t)          |dd          }	n)# t*          $ r}
t          j        d|
|            d }
~
ww xY wt!          j        | j        d
|	          }	t           j        s|st	          |	                    d                    }|dk    r[t          d| dt          j         t          j	                   t          j        d           |                     ||||||d          S |dk    rt          j                                        t          j        ddd          k    r[t          d| dt          j         t          j	                   t          j        d           |                     ||||||d          S t5          |	d          S )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)config
PRODUCTIONr   rP   rO   	cmf_alertr)   
api_methodr'   WARNINGdatetimedatetodayr   cmfutil	cmf_dumpsresub_BIG_INT_JSON_HACK_REr    r   	TypeErrorr   encoder*   response_okr   )rx   result_dictr   r   r   r   r   r   response	json_dataeactual_sizes               r"   r  zApiView.response_okJ  sn     	/ 	/+t,, /{##d**b474D4Db bSTS_b b%o/ / / / /
 %%++0C0C0E0EVZ\^`bHcHc0c0c b474D4Db bSTS_b b%o/ / / / 88KueZHH  	a))(33It9;TV_VfVfVhVhiiII!(15III		   BAxPPP t9;TV_``I  	A 	Ai..w7788K---I"I I:;,I I!/+ + + + ijjj''T5%QXeo{'  A  A  A_,,1D1D1F1FW[]_acIdId1d1d I"I I:;,I I!/+ + + + hiii''T5%QXeo{'  A  A  A 	,>????s   E( (
F2F		Fc                 ,   t           j        rd S t          j                            d          rd S |                    d          st                               d           d S t          j                                        	                    d          d d         t           j
        j        j        d}t          j        |t          j        |                    r"t                               d           |d         S t                               d	           d S )
NNO_CACHEjshash:z$api_cache_add failed, invalid jshash%Y%m%d%H%M%S%f)r   current_person_idzapi_cache_add endr   zapi_cache_add failed)r)   no_jscache_forceosenvironr   
startswithr*   r  utcnowstrftimecurrent_personidvaluer   _obj_dict_setra   r   )rx   rd   	res_caches      r"   api_cache_addzApiView.api_cache_add  s     	4:>>*%% 	4y)) 	GG:;;;F&--//889IJJ3B3O!"!1!4!:< <	 "4i)@)@AA 	&GG'(((W%%	&'''''r$   c                     t           j                            d          rd S |                    d          sd S t	          j        |          }|sd S t          j        |          }t          j	        d|            |S )Nr  r  zAPI CACHE HIT )
r  r  r   r  r   _obj_dict_getra   r   r'   r(   )rx   rd   _resress       r"   api_cache_getzApiView.api_cache_get  s    :>>*%% 	4y)) 	4&t,, 	4l4  ,d,,---
r$   c                 $     | j         |g|R i |S r2   full_cache_validationrx   jshash_list_args_kwargss       r"   public_full_cache_validationz$ApiView.public_full_cache_validation  %    )t)+IIIIIIIr$   c                 $     | j         |g|R i |S r2   r,  r.  s       r"   sdesk_full_cache_validationz#ApiView.sdesk_full_cache_validation  r3  r$   c                 z   dt           j                                                             d          d d         i}|D ]Z}|                    d          st	          j        |          }|r,t          j        |          }|                    d          ||<   [| 	                    |d d t          j        d          S )Notherr  r  r  r   T)r   r   r   r   )r  r  r  r  r   r'  ra   r   r   r  r)   r   )rx   r/  r0  r1  r   jshash
redis_data
cache_datas           r"   r-  zApiView.full_cache_validation  s    8,3355>>?OPPQTRTQTUV! 	9 	9F$$Y// "088J 9#\*55
!+!8!8vTQWVZ[[[r$   c                 V    t           j        rt           j        t           j        k    rdS dS )u;   
        Проверяем доступ к апи
        FT)r)   r   anonymous_userr   s    r"   _check_accesszApiView._check_access  s)    
  	1#3q7G#G#G5tr$   r   c                 2   	 |                     dd          \  }}n# t          $ r Y dS w xY w|dk    r	|dv rd| }|| j        vrdS | j        |         }|d         }d	}|d
v r|j        s	|sd| }d}||d         vrdS |d         |         }||d<   ||d<   |S )u  
        Поиск метода rpc

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

        Возвращает не метод, а структуру из self.get_rpc + доп.поля:
         - use_simple - когда решили использовать slist или sget
         - _class - указатель на модель
        r   r   maxsplitNCmfAttachment)createupdatedeleteapi_r   F)r   rP   sTr   _use_simple)split
ValueErrorrw   disable_simple)rx   r   rJ  proc_cls_nameproc_methodproc_clsr   
use_simples           r"   rpc_prepare_methodzApiView.rpc_prepare_method  s   	)/cA)F)F&M;; 	 	 	44	 O++<<<2[22((48M*x  
/))#2D)^)+k++KJhy1114 y)+6 #H%/M"s    
++c                 44   d t           _        |                                 s|                     dd          S t           j        j        rUt           j        j        t          j        k    r6|                     ddt           j        j         dt          j         d          S t                               dt           j	        j
        j         d           t          j                                        }t          t          j                  }t                               dt          j         d	t          j         d
| d           t'          |t(                    s|                                 S |                    d          t           _        |                    d          t           _        |                    d          t           _        |                    d          t           _        t           j        sAt5          ddt6          j                   t;          t=                                t           _        d|vr|                     d          S |d         t           _         t           j        r/t7          j!        dt           j          dt           j"         d           |                    dd          }|t           _#        |                    d          pi }|t           _$        tK          |&                                          }|                    d          pi }tK          |&                                          }h d}|'                    |          s|'                    |          r)t          j        dk    r| (                    d| d          S |                    d          pg }	|	t           _)        |                    d           }
|
d!k    r|                    d"          pi }|r||d"<   |                    d#d           }|r||d#<   |                    d$d           }|r||d$<   |                    d%d           }|r||d%<   |                    d&d           }|r||d&<   |                    d'd           }|r||d'<   |                    d#g           t           _*        h d(}t           j*        D ]:}||v r|+                    |           |d)z   |v r|+                    |d)z              ;|t           _,        |                    d*i           t           _-        t           j-                            d+          rt\          j/        0                                 |                    d,d           }|r||d,<   | (                    d-          S t          j1        rt           j2        |d         |	|3                                t           j-        d.}|d         4                                D ]S\  }}t'          |t:                    r9tk          |          d/k    r&d0tk          |           d|d d1          |d         |<   Ttm          d2tn          8                    |                      |                    d3          }|                    d4d           }|                    d5          }|d         }g }|d6k    r | j9        |	i |S |d7k    r | j:        |	i |S |d8k    r | j;        |	i |S d }|                    d9d           }| <                    ||          }|s| =                                S |d:         }|d;         }|d<         } d=}!d>D ]/}"|"|d         v r!d}!d=t           _>        t           j?        @                    |jA                   d?|d         v rd=}#|
d!k    rM|rK|d@         dAk    r?t'          |dB         t:                    r$t          C                    |dB         dC           d}#|r(dA|v r$t          C                    |dA         dC           d}#|r(dD|v r$t          C                    |dD         dC           d}#|rd"|v r|d"         d@         dAk    rKt'          |d"         dB         t:                    r*t          C                    |d"         dB         dC           d}#|d"         d@         dDk    rKt'          |d"         dB         t:                    r*t          C                    |d"         dB         dC           d}#|	r.dE|	d@         v r$t          C                    |	d@         dC           d}#dF|d         k    r	 g dG}$|$D ]}%|%|d         v rd}# n|#s#t                               dH|d                      n1dI|d         v rd=}!|r|                    dJ          rd=}!t          |dKd=          rd=}!|                    dL          }&|                    dM          }'|'rt\          jE        F                                 |'t           _G        |!r#|'!t5          dN| dt6          j                   d=}!|!rE|rt                               dO           n'|&r$t          j                                        }t                               dP           | H                    |'          }(t          dQt          j                                        |z
  jJ        dRz             t                               dS           |(r|&|(                    dL          k    rQ|rt          jL        |          }t                               dT           | M                    d d |(dL         || |U          S t                               dV           |dW         s|dX         s|dY         rn|                    dZ|!           })t           j         N                    d[          d\         d]k    }*|
d!k    rt                               d^           d"|v rdA|d"         v r{|d"         d@         dAk    rit                               d_           t)                      }+|d"         |+d"<   dAg|+d#<   |*|+d`<    |j        di |+}tk          |d"                   dak    r|d"= n|                    dA          s8|r6t                               d_           |                    |dAg||*b          }n|rdA|v r|)r-t          C                    |                    dA                     t)                      }+dAdc|                    dA          g|+d"<   dAg|+d#<   |*|+d`<    |j        di |+}|O                    dAd           n@|r3|3                                }+g |+d"<   dAg|+d#<   |*|+d`<    |j        di |+}n|                     ddde          S tk          |	          d@k    s
dE|	d@         vr|                     dddf          S |	O                    d@          },|)rt          C                    |,           t)                      }+dAdc|,g|+d"<   dAg|+d#<   |*|+d`<   t           j         dgk    r|+d#         @                    dh           |di         djk    r,t           jP        Q                    t;          |,                      |j        di |+}|di         djk    rt          |          D ]}-|jS                            |-          }.|.r|.jT        s5t5          dk|- dlt6          j        m           |O                    |-           Zt          |jS        |-         t          jS        jW                  rA||-         t          k    r0t5          dnt6          j        m           |O                    |-           |rf|)rdt          C                    |jY        j                   t          |dD          r0|j
        j[        s$t          C                    |j
        j                   |sBt                               do           t                       | ]                    d i d |dpq          S t'          |t          j.        j^                  o|j_        j        }/t'          |t          j.        j`                  o|ja        j        }0t'          |t          j.        j`                  o|jb        j        }1t'          |t          j.        j^                  o|jc        jd        }2t\          j/        e                    |/|jA        |0|jY        j        |1|dr|2d=s	  	        swt                               dt           t\          jf        g                    dr|jA        |duv           t                       | ]                    d i d |dwt                      x          S t                               dy           d[|di         v r|di         N                    d[dz{          \  }}3t\          j/        e                    |/|jA        ||0|jY        j        |1|dr|2d=|
  
        swt                               d}           t\          jf        g                    dr|jA        |duv           t                       | ]                    d i d |d~t                      x          S t          ||          }4t          |4|3          }nt          ||di                   }t          dt          j                                        |z
  jJ        dRz             t          j                                        }t                               d|d                     	 |dY         r|i                    |	|          }5n ||	i |}5n-# t          $ r}6t          |6           t7          jl        d           t;          |6          }7t'          t          |6dd           t          t          f          r$dn                    d |6jo        D                       }7| ]                    d i d ||7|6x          cY d }6~6S d }6~6wt          $ rr}6t          jr        l                    d           t          |6           d|d          d}8|8t          jt                    z  }8| u                    d|8|6          cY d }6~6S d }6~6ww xY wt                               d           t          dt          j                                        |z
  jJ        dRz             t          j                                        }|r|jv        rt                               d           	 |w                                 n# t          $ r}6t          |6           t7          jl        d           t;          |6          }7t'          t          |6dd           t          t          f          r$dn                    d |6jo        D                       }7| ]                    d i d ||7|6x          cY d }6~6S d }6~6ww xY wt                               d           t          dt          j                                        |z
  jJ        dRz             t          j                                        }t                       t          dt          j                                        |z
  jJ        dRz             t          j                                        }|di         dv r|5o|5jY        j        }5n(|di         djk    rt          |5dA          r|5jY        j        }5t          x                    |5|          }9t                               d           | r|9y                                 n|9N                                 t          dt          j                                        |z
  jJ        dRz             |9jz        |9j{        };}:|di         dv r|;rd}<t'          |;t(                    r|;                    d          dk    rdu}<|jA        dk    s|<duk    rt'          |;t(                    r/t\          jf        g                    dr|jA        |;dA         |<v           nMt          |;          r.t\          jf        g                    dr|jA        |;jY        |<v           nt          |;d          |di         dv rd}<d=}=d=}>|;D ]6}?t'          |?t(                    r|?                    dd           dk    rd}=4d}>7|=r|>rd}<n|=rdu}<|jA        dk    s|<duk    r't\          jf        g                    dr|jA        |<           t          d|9j~                   t                               d           t          j                                        }|!r+t          t           dd           s|                     |'          }&|rt          jL        |          }	 | M                    |;|:|&|||           }@n4# t           $ r&}6t                               d| d|;             d }6~6ww xY wt          dt          j                                        |z
  jJ        dRz             t                               d           |@S )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>   is_dummy
user_localis_templateperm_encryptvacation_end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-   rm     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_validationrJ  r   r   rG  F)z.get_getz.list_listz.select_selectz.sum_sumz.count_countz.max_maxz.min_minr   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   r8  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   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   r]  r  z==i  u   Необходимо указать filter или kwargs для получения объекта перед вызовом его методаu1   Необходимо указать id в args[0]zCmfTask.updater`  r   rC  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 endr   r?  )
r  r  object_fieldr  r  r  r  r  r  r  z"API object field access prohibiteduQ   Поле объекта не доступно: недостаточно прав.preparezAPI method start r+   zUserError Trace:c                 ,    g | ]}t          |          S rh   r   r}   is     r"   r   z ApiView.post.<locals>.<listcomp>  s    %=%=%=c!ff%=%=%=r$   	Exceptionu/   Ошибка выполнения метода z

ir   zAPI method endcall_method_mszAPI save startc                 ,    g | ]}t          |          S rh   r   r  s     r"   r   z ApiView.post.<locals>.<listcomp>  s    )A)A)AQ#a&&)A)A)Ar$   zAPI save endsavecommit)rB  upsertcreate_from_template)rt  zAPI json dump startresult_to_dict_ms)r   sgetok_acl_objdenyCmfAuditz$get result must be dict or dataclass)rP   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_mszAPI request endrh   )r)   r   r=  r   global_settingseva_versionr   EVA_VERSIONr*   r   r   r"  r  nowr   r   dataremote_addrurlr   dictr   r   rS  rT  rU  r  r'   r  r   r   r   r  r(   current_userr   
api_kwargsr   keysintersectionr   api_args
api_fieldsr   api_hack_fieldsrm  r   CmfAccessListactivate_admin_mode	API_TRACErp  copyrc   rO   printjsonr   r-  r2  r5  rO  r   in_memory_cachein_memory_cache_skip_modelsr   r   r  cache_obj_lock_getr   
CmfLicenselicense_api_notifyr8  r*  rn   microsecondsr   jshash_invalidate_confirm_listr  rH  popskipcache_select_for_updateaddrP   r   r   r   r   CmfPassword_PASSWORD_MASKr!  hasattrvirtualr   r   	CmfEntityrj  CmfModelcmf_owner_id	parent_idrk  oldcheck_accessr  audit_eventCmfPermissionErrorapply_asyncCmfUserErrorr   r   tupler   r,   r  r   logger	traceback
format_excr   
is_changedr  CmfResultSplittersplit_simpler   r   r   r  r  r%  rI  )Arx   
start_datejson_resr   r-   
kwargs_setrW  save_kwargs_setblock_kwargsr,   jsonrpc_ver_filterr   r\  r]  r^  r_  r  r   ro  
trace_datakvrs  rt  ru  r   invalidate_listr   rJ  rL  r   rN  api_use_cacherF  cache_lock_ok_cachelock_skip_methodsmr   r8  r:  r  r  
tmp_kwargsr!  argfieldr  obj_owner_idobj_parent_idrk  field_method	obj_fieldr   r  	abort_msgmsgsplitterr   r  check_result_statuscheck_result_have_denycheck_result_have_ok_objrespsA                                                                    r"   postzApiView.post  sP   !!## 	7;;s$5666 ( 	W!-1CCC;;s %Vefev  fC %V %V  IO  I[ %V %V %V W W W 	
Da&6&;&ADDDEEE&**,,
&&	kw':kkkk`hkkklll(D)) 	&##%%%#<<(899!n55||H--%\\*<==| 	(+w8 8 8 8 uww<<AL8##''(=>>>)  	TL!,RRRRRSSSWb))h''-2''
jj//52k..0011777""<00 	BO4P4PQ]4^4^ 	B"k11**  ,A|  ,A  ,A  ,A  B  B  B||F##)r
ll9--%ll8,,2G +#*x \\(D11F *#)x LL$//E ("'w||J55H .%-z"||J55H .%-z"&ll+<dCCO <,;()zz(B//P P P , 	9 	9J_,,&&z222%?22&&z%'7888+ ,,w++7;;|$$ 	7 44666<<
D11 	T!)F:&&'RSSS 	9 "8, ++-- J #8,2244 P P1a%% P#a&&C--.OSVV.O.Oag.O.OJx(+7tzz*5577888 \\,//
,,y$//<<
++(# 222-4-t>v>>>999444dEfEEE888343TDVDDD!&6==--fnEE 	+((***Y'(# /

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

48H8H+IJx(,06Jx(0;J}-!#'//J//CJJtR(((( 
F!'J+-Jx(,06Jx(0;J}-!#'//J//CC;;s -E F F F t99>>Q;;s,_```XXa[[ 3..r222!VV
(,dB'7
8$(,v
8$,7
=) <#333x(//
;;;v&(22155c"gg>>>cg++
++6"h..<< 
, 
,CJNN3//E ,$ ,%&h#&h&h&hpwp  A  A  A  A"JJsOOOO'
39OPP ,U[\_U`drUrUr%&ksz  tC  D  D  D  D"JJsOOO ?z ?**36<888 3'' ?0@ ?..sx~>>> \-...!!!xxbEZ   \ \ \ )cj.BCCgHaHgO%c3:+>??ZCDTDZL&sCJ,?@@XS]EXM4>sCJDX4Y4Y  5L^a  _H  _L1'44$3#.bn!fl]\_!'4Ygl	 5 n n C
 6777++F3>be:@ , B B B!!!xxbEam  nB  nB   C C C GG()))k&)))+6v+>+D+DSST+D+U+U(
L+88(7%(^*^j"%&,`c%+8]kp 9 r r S GG@AAAO//s~fi>D 0 F F F#%%%88#"Dq  ~P  ~R  ~R $ S S S $C44	 L99
 !k&&9::i("3"7"7"9"9J"F!TW[![\\\&**,,
	8HX$688999	?9% 1++f+EE000 	] 	] 	]!0111AI'!VT22T5MBB ?HH%=%=af%=%=%=>>	88"DYZ[  ] ] ] ] ] ] ] ]  	? 	? 	?J  ---!\HXDV\\\C9')))C$$VSA$>>>>>>>>	? 	
 !!!&):)>)>)@)@:)M([^b(bccc&**,,
 	$3> 	$GG$%%%
a



 a a aa   !"4555FF	ga66uFF C #)A)A!&)A)A)A B BIxxbE^_   a a a a a a a aa GGN###fx04466CQTXXYYY&**,,
h!2!6!6!8!8:!E SVZ Z[[[&**,,
 v"NNN/	FF H,,vt$$ ),,VW,EE	%&&& 	!!####NN)H,=,A,A,C,Cj,P+^ae+efff$M8?k v/11k1"&+t,, -1L1LPV1V1V&,# ~++/Bf/L/Lk400 	YO// &s~*40@S 0 U U U U "+.. YO// &s~*~=P 0 R R R R $K1WXXXv"333"&%*"#(  $ 0 0dD)) 0dhhz4.H.HF.R.R-1**+/((% -*> -&1##' -&,# ~++/Bf/L/L++F3>:M , O O O 	)8+EFFF	#$$$&**,,
  	/,?!F!F 	/&&v..E 	Q'FxPPO	##KueP_is#ttDD 	 	 	GG  Mhp  M  M  @K  M  M  N  N  N	 	-0A0E0E0G0G*0T/bei/ijjj	!"""s   L(AL8 L8
AQ"MBAO#OAQ"O#AQ"O0A'AQQAQ"QAQ"S9AT T
AV>TBAV9V3AV>V9AV>e7Af fAgf!Af?f?Agr2   )rq   N)NNN)r   )FNF)F)$r|   
__module____qualname____url__ru   r   r   r   r   r   r   r   r   r   r   rP   rv   r   r   viewsactionr   r	  compiler  r  r%  r*  r2  r5  r-  r=  r   rO  r  __classcell__)ry   s   @r"   rp   rp      sC       GE E E E E E E   E E E EE E E E82 2 2X X X X7 7 7A A A A5 5 5? ? ? ? k# k#$ k# k# k# \k#Z$ $ $ 	YP P P 'BJ'cdd;@ ;@ ;@ ;@z( ( ("
 
 
J J JJ J J	\ 	\ 	\  * * * * * *X 	YN N N N N N Nr$   rp   )8decimal	ipaddressr'   sysr  ra   stringrandomr	  r  collectionsr   r  r   dataclassesr   r   r   r   r   r	   r
   uuidr   rX   r   r   ujsonr   r   
cmf.modelsr   cmf.data_providers.baser   r   cmf.includecmf.appr   r#   r   on_server_eventr.   rA   onr5   rE   rR   rT   rZ   r^   ri   rn   r  r  BaseViewrp   rh   r$   r"   <module>r     s         



     				     # # # # # #       $ $ $ $ $ $ < < < < < < < < < < < <             # # # # # # # #             B B B B B B B B            ( +,,,& & -, & 
(C886 6 986 
_,,= = -,= 
[C((  )(  
\S))u u *)u 
!S11f f 21f 
[C((. . )(.     r r r r rci  r r r r rr$   