
    %j2                        d 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mZmZmZmZmZ ddlZddlZddlmZ ddlmZmZmZmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$ dd	l%m&Z&  ejN                  e(      Z)d
Z*de+ddfdZ, G d d      Z-dej\                  de+de-fdZ/ G d d      Z0 G d de
      Z1d!dej\                  de+de2de2deee2ef      de3de0fdZ4dej\                  de+de2dede5de3defdZ6 G d d e      Z7y)"z3Created on Thu Apr 25 2024 14:50:05 by codeskyblue
    N)HTTPConnection)Path)AnyClassVarDictOptionalTupleUnion)AbstractUiautomatorServer)
*AccessibilityServiceAlreadyRegisteredErrorAPKSignatureError	HTTPErrorHTTPTimeoutErrorLaunchUiAutomationErrorRPCInvalidErrorRPCStackOverflowErrorRPCUnknownErrorUiAutomationNotConnectedErrorUiObjectNotFoundError)with_package_resource)__apk_version__i0#  portreturnc                 :    d| cxk  rdk  sn t        d|        y )N   i  zport must be 1-65535, got )
ValueErrorr   s    U/var/www/oz-panel.ru/ozpay-pub/venv/lib/python3.12/site-packages/uiautomator2/core.py
check_portr   "   s'    5dV<==     c                   j    e Zd Zdej                  ddfdZedefd       Zde	fdZ
dee   fdZd Zy)	MockAdbProcessconnr   Nc                      | _         t        j                          _        t	                _         fd}t        j                  |      }d|_        d|_        |j                          y )Nc                  J   	 j                   j                  j                  d      x} rYt        j	                  d|        j
                  j                  |        j                   j                  j                  d      x} rYj                  j                          y #  Y xY w)Ni   zMockAdbProcess: %s)	_connr#   recvloggerdebug_outputextend_eventset)chunkselfs    r   wait_finishedz.MockAdbProcess.__init__.<locals>.wait_finished,   s    #zz33D99e9LL!5u=LL''.  $zz33D99e9
 KKOOs   A?B B")targetTwait_adb_conn)
r&   	threadingEventr,   	bytearrayr*   Threaddaemonnamestart)r/   r#   r0   ts   `   r   __init__zMockAdbProcess.__init__(   sO    
oo' {	 M2 		r    c                     | j                   S )z& subprocess do not have this property )r*   r/   s    r   outputzMockAdbProcess.output:   s     ||r    c                 :    | j                   j                  d      S )N   )timeout)r,   waitr=   s    r   rB   zMockAdbProcess.wait?   s    {{**r    c                 :    | j                   j                         ryy )Nr   )r,   is_setr=   s    r   poolzMockAdbProcess.poolB   s    ;;r    c                 X    | j                   j                          | j                          y N)r&   closerB   r=   s    r   killzMockAdbProcess.killG   s    

		r    )__name__
__module____qualname__adbutilsAdbConnectionr;   propertybytesr>   boolrB   r   intrE   rI    r    r   r"   r"   '   sW    X33  $   +d +hsm 
r    r"   devc                 x    d| }t         j                  d|       | j                  |d      }t        |      }|S )z$Launch uiautomator2 server on devicezGCLASSPATH=/data/local/tmp/u2.jar app_process / com.wetest.uia2.Main -p zlaunch uiautomator with cmd: %sT)stream)r(   r)   shellr"   )rT   r   commandr#   processs        r   launch_uiautomatorrZ   L   s@    WX\W]^G
LL2G<99WT9*DT"GNr    c                   2    e Zd ZdeddfdZd Zed        Zy)HTTPResponsecontentr   Nc                     || _         y rG   )r]   )r/   r]   s     r   r;   zHTTPResponse.__init__V   s	    r    c                 @    t        j                  | j                        S rG   )jsonloadsr]   r=   s    r   r`   zHTTPResponse.jsonY   s    zz$,,''r    c                 <    | j                   j                  dd      S )Nutf-8ignoreerrors)r]   decoder=   s    r   textzHTTPResponse.text\   s    ||""78"<<r    )rJ   rK   rL   rP   r;   r`   rO   rh   rS   r    r   r\   r\   U   s.     $ ( = =r    r\   c                   T     e Zd Zdej                  def fdZd ZdefdZ	d Z
 xZS )AdbHTTPConnectiondevicer   c                 B    t         |   d|       || _        || _        y )N	localhost)superr;   _AdbHTTPConnection__device_AdbHTTPConnection__port)r/   rk   r   	__class__s      r   r;   zAdbHTTPConnection.__init__b   s     d+r    c                     	 | j                   j                  t        j                  j                  | j
                        | _        y # t        j                  $ r}t        d|       |d }~ww xY w)Nz*Unable to connect to uiautomator2 server: )	ro   create_connectionrM   NetworkTCPrp   sockAdbErrorr   )r/   es     r   connectzAdbHTTPConnection.connectg   s^    	U778H8H8L8LdkkZDI   	UHLMSTT	Us   AA A-A((A-r   c                     | S rG   rS   r=   s    r   	__enter__zAdbHTTPConnection.__enter__m   s    r    c                 $    | j                          y rG   )rH   )r/   exc_type	exc_value	tracebacks       r   __exit__zAdbHTTPConnection.__exit__p   s    

r    )rJ   rK   rL   rM   	AdbDevicerR   r;   ry   r   r{   r   __classcell__)rq   s   @r   rj   rj   a   s3    x11  
U> r    rj   device_portmethodpathdataprint_requestc                    	 t         j                  d|||       |rt        j                  j                         }|j	                  d      dd }d| | }	|d| |	g}
|r(|
j                  dt        j                  |       d       t        d	|        t        d
j                  |
             dddd}t        | |      5 }||_        |s|j                  |||       n(|j                  ||t        j                  |      |       |j                         }t               }|j                  d      x}r%|j!                  |       |j                  d      x}r%|j"                  dk7  r%t%        d|j"                   d
|j&                         t)        |      }ddd       |rt        j                  j                         }|j	                  d      dd }t        | d       t        j*                  j-                                t        d|z
  j/                         z         S # 1 sw Y   xY w# t0        j2                  $ r}t5        d|       |d}~wt0        j6                  $ r}t%        d|       |d}~ww xY w)z(Send http request to uiautomator2 serverzhttp request %s %s %sz%H:%M:%S.%fNzhttp://127.0.0.1:z
$ curl -X z-d ''z# http timeout= uiautomator2 zapplication/json)z
User-AgentzAccept-EncodingzContent-Typer   )headersi      zHTTP request failed: z Response >>>z<<< END timed_used = %.3f
zHTTP request timeout: )r(   r)   datetimenowstrftimeappendr`   dumpsprintjoinrj   rA   requestgetresponser5   readr+   statusr   reasonr\   rh   rstriptotal_secondsrequestsTimeoutr   RequestException)rT   r   r   r   r   rA   r   
start_timecurrent_timeurlfieldsr   r#   	_responser]   r.   responseend_timerx   s                      r   _http_requestr   t   sm   0<,fdDA !**..0J%..}=crBL%k]4&9C"j$93?FTZZ%5$6a89OG9-.#((6"# )!.

 s5 	-"DLVT7;VT4::d+;WM((*IkG$>>$//%/u% %>>$//%/3&"7	8H8H7I9K[K[J\ ]^^#G,H	- ((,,.H#,,];CR@L\N-01(--&&()/Hz4I3X3X3ZZ[)	- 	-*  D!7s;<!C$$ </s34!;<sD   C H4 BH(?H(BH4 (H1-H4 4J IJ ,I;;J paramsrA   c           	      v   dd||d}t        | |dd|||      }|j                         }t        |t              st	        d      t        |t              rd|v rt
        j                  d	|       |d   j                  d
      }	|d   j                  dd      }
|d   j                  d      }d|j                  v rt        d      d|
v rt        d      d|
v rt        d      d|
v rt        |	|
|      d|
v rt        d|
 ||dd dz   |dd z         t        d|	 d|
 ||      d|vrt	        d      |d   S )zXSend jsonrpc call to uiautomator2 server
    
    Raises:
        UiAutomationError
    z2.0r   )jsonrpcidr   r   POSTz
/jsonrpc/0)rA   r   zUnknown RPC error: not a dicterrorzjsonrpc error: %scodemessager   r   zUiAutomation not connectedzandroid.os.DeadObjectExceptionz%android.os.DeadSystemRuntimeExceptionz%uiautomator.UiObjectNotFoundExceptionzjava.lang.StackOverflowErrorzStackOverflowError: Ni  z...izUnknown RPC error: r   resultz"Unknown RPC error: no result field)r   r`   
isinstancedictr   r(   r)   getrh   r   r   r   r   )rT   r   r   r   rA   r   payloadrr   r   r   
stacktraces               r   _jsonrpc_callr      s    	G 	c;gwfstA668DdD!=>>$'T/($/G}  (w-##Ir2']&&v.
'1661/0LMM+w6/0PQQ2g=/0WXX2g='gv>>)W4'*>wi(H&R\]b^bRcfkRknxy~y  oA  SA  B  B 3D67)DfjYYtBCC>r    c            	       v   e Zd ZU dZeed<   i Zeee	e
ef   ej                  f      ed<    ej                         Zeej                     ed<   efdej                   deddfd	Zedefd
       Zej*                  defd       Zd Zd Zdee
ef   de
defdZddZdefdZdefdZddZdde
de dede fdZ!y)BasicUiautomatorServerzJ Simple uiautomator2 server client
    this is runs without atx-agent
    _device_server_port_locks_locks_guardrT   device_server_portr   Nc                    t        |       |j                  |f}t        j                  5  |t        j                  vr%t        j                         t        j                  |<   t        j                  |   | _        d d d        || _        d | _	        d| _
        || _        | j                          t        j                  | j                  d       y # 1 sw Y   WxY w)NF)rB   )r   serialr   r   r   r3   Lock_lock_dev_process_debugr   start_uiautomatoratexitregisterstop_uiautomator)r/   rT   r   keys       r   r;   zBasicUiautomatorServer.__init__   s    %&zz-.#00 	<07775>^^5E&--c2/66s;DJ	< 	#5  --E:	< 	<s   ACCc                     | j                   S rG   )r   r=   s    r   r)   zBasicUiautomatorServer.debug   s    {{r    valuec                 $    t        |      | _        y rG   )rQ   r   )r/   r   s     r   r)   zBasicUiautomatorServer.debug   s    5kr    c                 J   | j                   5  | j                          | j                  r!| j                  j                         d| _        | j	                         s5t        | j                  | j                        | _        | j                          ddd       y# 1 sw Y   yxY w)z~
        Start uiautomator2 server

        Raises:
            LaunchUiautomatorError: uiautomator2 server not ready
        N)	r   
_setup_jarr   rE   _check_aliverZ   r   r   _wait_readyr=   s    r   r   z(BasicUiautomatorServer.start_uiautomator   s{     ZZ 	#OO}}==%%'3$(DM$$& 2499d>V>V W  "	# 	# 	#s   BBB"c                    t        d      5 }d}| j                  ||      rt        j                  d       n?t        j                  d||       | j                  j
                  j                  ||d       d d d        y # 1 sw Y   y xY w)Nzassets/u2.jarz/data/local/tmp/u2.jarzfile u2.jar already pushedzpush %s -> %sT)check)r   _check_device_file_hashr(   r)   r   syncpush)r/   jar_pathtarget_paths      r   r   z!BasicUiautomatorServer._setup_jar  st    "?3 	Gx2K++HkB9:_hD		##Hk#F	G 	G 	Gs   A*A??B
local_fileremote_filec                    t        j                         }t        |d      5 }|j                  |j	                                ddd       |j                         }t        j                  dt        j                  j                  |      |       | j                  j                  dd|g      }d|v r!d|v r| j                  j                  d|g      }||v S # 1 sw Y   xY w)z& check if remote file hash is correct rbNzfile %s md5: %stoyboxmd5sumz	not foundmd5)hashlibr   openupdater   	hexdigestr(   r)   osr   basenamer   rW   )r/   r   r   r   f	local_md5r>   s          r   r   z.BasicUiautomatorServer._check_device_file_hash
  s    kkm*d# 	!qJJqvvx 	!MMO	&(8(8(DiP(Hk!BCv+"7YY__e[%9:FF""	! 	!s    CCc                 &    | j                  |       y)z'Wait until uiautomator2 server is readyN)_wait_app_process_ready)r/   launch_timeouts     r   r   z"BasicUiautomatorServer._wait_ready  s    $$^4r    rA   c                    t        j                          |z   }d}t        j                          |k  r| j                  j                  j                  dd      }||z  }d|v rt	        |      | j                  j                         t        d|      | j                         ryt        j                  d       t        j                          |k  rt        d	|      )
a@  
        ERROR1:
            [server] INFO: [UiAutomator2Server] Starting Server
            java.lang.IllegalStateException: UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@5deffd5already registered!

        NORMAL:
            [server] INFO: [UiAutomator2Server] Starting Server
            SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
            SLF4J: Defaulting to no-operation (NOP) logger implementation
            SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
        r   rc   rd   re   zalready registeredNzserver quit unexpectly      ?zserver not ready)	timer   r>   rg   r   rE   r   r   sleep)r/   rA   deadlineoutput_bufferr>   s        r   r   z.BasicUiautomatorServer._wait_app_process_ready  s     99;(iikH$]]))000JFV#M#v-@HH}}!!#/-.FVV  "JJrN iikH$ &&8-HHr    c                     	 t        | j                  | j                  dd      }|j                  dk(  S # t        t
        f$ r Y yw xY w)NGETz/pings   pongF)r   r   r   r]   r   ConnectionError)r/   r   s     r   r   z#BasicUiautomatorServer._check_alive4  sJ    	$TYY0H0H%QXYH##w..?+ 		s   03 AAc                    | j                   5  | j                  r!| j                  j                          d | _        d d d        |rnt        j                         dz   }t        j                         |k  r?| j	                         sy t        j
                  d       t        j                         |k  r>y y y # 1 sw Y   zxY w)N
   r   )r   r   rI   r   r   r   )r/   rB   r   s      r   r   z'BasicUiautomatorServer.stop_uiautomator;  s    ZZ 	%}}""$ $	%
 yy{R'H))+(((*

2 ))+( 	% 	%s   .B44B=r   r   c           	      `   	 t        | j                  | j                  |||| j                        S # t        t
        f$ rn}t        j                  d|       | j                          | j                          t        | j                  | j                  |||| j                        cY d}~S d}~ww xY w)z(Send jsonrpc call to uiautomator2 serverz!uiautomator2 is not ok, error: %sN)
r   r   r   r   r   r   r(   r)   r   r   )r/   r   r   rA   rx   s        r   jsonrpc_callz#BasicUiautomatorServer.jsonrpc_callH  s    	l D,D,DffV]_c_j_jkk89 	lLL<a@!!#""$ D,D,DffV]_c_j_jkk		ls   -0 B-A#B("B-(B-)   )T)Nr   )"rJ   rK   rL   __doc__rR   __annotations__r   r   r   r	   strr3   r   r   DEFAULT_SERVER_PORTrM   r   r;   rO   rQ   r)   setterr   r   r
   r   r   r   floatr   r   r   r   r   rS   r    r   r   r      s,     ?AFHT%S/9>>9:;@-;Y^^-=L(9>>*=J] ;H.. ;C ;bf ; t   \\"4 " "# G
#%T	2B 
#QT 
#Y] 
#5Iu I4d l3 l lU lTW lr    r   )Ng      $@F)8r   r   r   r   r`   loggingr   r3   r   http.clientr   pathlibr   typingr   r   r   r   r	   r
   rM   r   uiautomator2.abstractr   uiautomator2.exceptionsr   r   r   r   r   r   r   r   r   r   uiautomator2.utilsr   uiautomator2.versionr   	getLoggerrJ   r(   r   rR   r   r"   r   rZ   r\   rj   r   rQ   r   r   r   r   rS   r    r   <module>r     sm        	   &  > >   ;9 9 9 5 0			8	$ >S >T >
" "JH.. c n 	= 	= &2<x)) 2< 2<S 2<PS 2<[cdhilnqiqdr[s 2<  Z^ 2<  kw 2<j%x)) % %S %RU %`e %vz %  @C %Pl6 lr    