
    fP                     `    d Z ddlZddlmZ ddlmZ ddlmZ  G d de      Z G d	 d
e      Z	y)a  An interface for publishing rich data to frontends.

There are two components of the display system:

* Display formatters, which take a Python object and compute the
  representation of the object in various formats (text, HTML, SVG, etc.).
* The display publisher that is used to send the representation data to the
  various frontends.

This module defines the logic display publishing. The display publisher uses
the ``display_data`` message type that is defined in the IPython messaging
spec.
    N)Configurable)List   )publish_display_datac                   F     e Zd ZdZd	 fd	Zd	dZd
dddddZddZ xZS )DisplayPublisherzA traited class that publishes display data to frontends.

    Instances of this class are created by the main IPython object and should
    be accessed there.
    Nc                 2    || _         t        |   |i | y N)shellsuper__init__)selfr   argskwargs	__class__s       R/var/www/cvtools/html/venv/lib/python3.12/site-packages/IPython/core/displaypub.pyr   zDisplayPublisher.__init__'   s    
$)&)    c                     t        |t              st        d|z        |t        |t              st        d|z        yy)zValidate the display data.

        Parameters
        ----------
        data : dict
            The formata data dictionary.
        metadata : dict
            Any metadata for the data.
        zdata must be a dict, got: %rNz metadata must be a dict, got: %r)
isinstancedict	TypeError)r   datametadatas      r   _validate_datazDisplayPublisher._validate_data+   sJ     $%:TABBh- BT IJJ .  r   F	transientupdatec                    i }| j                   t        | j                   di       }|j                         D ]'  \  }}	||v s |	||   |j                  |d              y d|v rt	        |d          yy)a  Publish data and metadata to all frontends.

        See the ``display_data`` message in the messaging documentation for
        more details about this message type.

        The following MIME types are currently implemented:

        * text/plain
        * text/html
        * text/markdown
        * text/latex
        * application/json
        * application/javascript
        * image/png
        * image/jpeg
        * image/svg+xml

        Parameters
        ----------
        data : dict
            A dictionary having keys that are valid MIME types (like
            'text/plain' or 'image/svg+xml') and values that are the data for
            that MIME type. The data itself must be a JSON'able data
            structure. Minimally all data should have the 'text/plain' data,
            which can be displayed by all frontends. If more than the plain
            text is given, it is up to the frontend to decide which
            representation to use.
        metadata : dict
            A dictionary for metadata related to the data. This can contain
            arbitrary key, value pairs that frontends can use to interpret
            the data.  Metadata specific to each mime-type can be specified
            in the metadata dict with the same mime-type keys as
            the data itself.
        source : str, deprecated
            Unused.
        transient : dict, keyword-only
            A dictionary for transient data.
            Data in this dictionary should not be persisted as part of saving this output.
            Examples include 'display_id'.
        update : bool, keyword-only, default: False
            If True, only update existing outputs with the same display_id,
            rather than creating a new output.
        Nmime_renderersz
text/plain)r   getattritemsgetprint)
r   r   r   sourcer   r   r   handlersmimehandlers
             r   publishzDisplayPublisher.publish=   s    Z ::!tzz+;R@H%^^- 	MD't|T
HLLt$<=	
 4$|$%  r   c                     t        dd       t        j                  j                          t        dd       t        j                  j                          y)z.Clear the output of the cell receiving output.z[2K )endN)r#   sysstdoutflushstderr)r   waits     r   clear_outputzDisplayPublisher.clear_outputv   s6    kr"

kr"

r   r
   NN)returnNF)	__name__
__module____qualname____doc__r   r   r(   r1   __classcell__r   s   @r   r   r       s(    *K$7&TRW 7&rr   r   c                   B     e Zd ZdZ e       ZdddddZd fd	Z xZS )	CapturingDisplayPublisherzA DisplayPublisher that storesNFr   c                D    | j                   j                  ||||d       y )N)r   r   r   r   )outputsappend)r   r   r   r$   r   r   s         r   r(   z!CapturingDisplayPublisher.publish   s$    DX)2VE 	Fr   c                 `    t         t        |   |       | j                  j	                          y r
   )r   r<   r1   r>   clear)r   r0   r   s     r   r1   z&CapturingDisplayPublisher.clear_output   s%    ';DA 	r   r2   r4   )	r5   r6   r7   r8   r   r>   r(   r1   r9   r:   s   @r   r<   r<   ~   s(    (fGFTRW F r   r<   )
r8   r,   traitlets.config.configurabler   	traitletsr   display_functionsr   r   r<    r   r   <module>rF      s6   $  6  4[| [| 0 r   