o
    _c                     @   sx   d Z ddlZddlmZmZmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ e	r2ddlmZmZ G dd	 d	eZdS )
zTarget module.    N)AnyCallable	CoroutineDictListOptional)TYPE_CHECKING)
CDPSession)Page)BrowserBrowserContextc                   @   s   e Zd ZdZdedddeg eeeef f de	de
e ded	ejd
dfddZde	d
dfddZd$ddZd
efddZd
e
e fddZed
efddZed
efddZed%ddZed&ddZed
e
d  fd d!Zded
dfd"d#ZdS )'TargetzBrowser's target class.
targetInfobrowserContextr   sessionFactoryignoreHTTPSErrorsdefaultViewportscreenshotTaskQueueloopreturnNc                 C   s   || _ || _|dd| _|| _|| _|| _|| _|| _d | _	| j
 | _| j
 | _| j d dkp8| j d dk| _| jrD| d d S d S )NZtargetId typepageurlT)_targetInfo_browserContextgetZ	_targetId_sessionFactory_ignoreHTTPSErrors_defaultViewport_screenshotTaskQueue_loop_pagecreate_future_initializedPromise_isClosedPromise_isInitialized_initializedCallback)selfr   r   r   r   r   r   r    r)   ;/usr/local/lib/python3.10/dist-packages/pyppeteer/target.py__init__   s"   zTarget.__init__blc                 C   s&   | j  r| j | _ | j | d S N)r$   doner!   r#   
set_result)r(   r,   r)   r)   r*   r'   *   s   
zTarget._initializedCallbackc                 C   s   | j d  d S r-   )r%   r/   r(   r)   r)   r*   _closedCallback0   s   zTarget._closedCallbackc                    s   |   I dH S )zACreate a Chrome Devtools Protocol session attached to the target.N)r   r0   r)   r)   r*   createCDPSession3   s   zTarget.createCDPSessionc                    sV   | j d dv r(| jdu r(|  I dH }t|| | j| j| jI dH }|| _|S | jS )z}Get page of this target.

        If the target is not of type "page" or "background_page", return
        ``None``.
        r   )r   background_pageN)r   r"   r   r
   creater   r   r    )r(   clientZnew_pager)   r)   r*   r   7   s   
zTarget.pagec                 C   s
   | j d S )zGet url of this target.r   r   r0   r)   r)   r*   r   J   s   
z
Target.urlc                 C   s   | j d }|dv r|S dS )zGet type of this target.

        Type can be ``'page'``, ``'background_page'``, ``'service_worker'``,
        ``'browser'``, or ``'other'``.
        r   )r   r3   Zservice_workerbrowserotherr6   )r(   _typer)   r)   r*   r   O   s   
zTarget.typer   c                 C   s   | j jS )z&Get the browser the target belongs to.)r   r7   r0   r)   r)   r*   r7   [   s   zTarget.browserc                 C   s   | j S )z1Return the browser context the target belongs to.)r   r0   r)   r)   r*   r   `   s   zTarget.browserContextc                 C   s&   | j d}|du rdS | jj|S )z\Get the target that opened this target.

        Top-level targets return ``None``.
        openerIdN)r   r   r7   Z_targets)r(   r:   r)   r)   r*   openere   s   zTarget.openerc                 C   sD   || _ | js| j d dks| j d dkr d| _| d d S d S d S )Nr   r   r   r   T)r   r&   r'   )r(   r   r)   r)   r*   _targetInfoChangedp   s   
zTarget._targetInfoChanged)r   N)r   r   )r   r   )__name__
__module____qualname____doc__r   r   r   r   r	   boolr   r   asyncioAbstractEventLoopr+   r'   r1   r2   r
   r   propertystrr   r   r7   r   r;   r<   r)   r)   r)   r*   r      s<    



r   )r@   rB   typingr   r   r   r   r   r   r   Zpyppeteer.connectionr	   Zpyppeteer.pager
   Zpyppeteer.browserr   r   objectr   r)   r)   r)   r*   <module>   s    