
    Og                        d dl mZ d dlmZmZmZmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZmZmZ erd dlmZ dd	gZd
ZdZ G d d      Z G d d	      Zy)    )annotations)TYPE_CHECKINGIterableSequenceOptionalIterator)dxftaguniform_appid)Tags)DXFKeyErrorDXFStructureError)ACAD_REACTORSREACTOR_HANDLE_CODEAPP_DATA_MARKER)AbstractTagWriterAppDataReactorsz#Invalid DXF attribute for entity {}zDXF attribute {} does not existc                  T    e Zd ZddZddZddZddZddZddZddZ	ddZ
dd	Zy
)r   c                "    t               | _        y N)dictdataselfs    [/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/entities/appdata.py__init__zAppData.__init__   s    %)V	    c                0    t        |      | j                  v S )z?Returns ``True`` if application-defined data exist for `appid`.r
   r   r   appids     r   __contains__zAppData.__contains__   s    U#tyy00r   c                ,    t        | j                        S )zReturns the count of AppData.)lenr   r   s    r   __len__zAppData.__len__   s    499~r   c                6    | j                   j                         S r   )r   valuesr   s    r   tagszAppData.tags#   s    yy!!r   c                d    	 | j                   t        |         S # t        $ r t        |      w xY w)zGet application-defined data for `appid` as
        :class:`~ezdxf.lldxf.tags.Tags` container.
        The first tag is always (102, "{APPID").
        The last tag is always (102, "}").
        )r   r
   KeyErrorr   r    s     r   getzAppData.get&   s5    	%99]5122 	%e$$	%s    /c                X    t        |      r|d   j                  }|| j                  |<   yy)zStore raw application-defined data tags.
        The first tag has to be (102, "{APPID").
        The last tag has to be (102, "}").
        r   N)r$   valuer   )r   r(   r!   s      r   setzAppData.set1   s+    
 t9GMME#DIIe r   c                   t        d |D              }t        |      }|d   t        |fk7  r |j                  dt	        t        |             |d   t        dfk7  r|j                  t	        t        d             | j                  |       y)zAdd application-defined tags for `appid`.
        Adds first tag (102, "{APPID") if not exist.
        Adds last tag (102, "}" if not exist.
        c              3  :   K   | ]  \  }}t        ||        y wr   )r	   ).0coder-   s      r   	<genexpr>zAppData.add.<locals>.<genexpr>?   s     @KD%F4'@s   r   }N)r   r
   r   insertr	   appendr.   )r   r!   r   s      r   addzAppData.add:   ss    
 @4@@e$7..KK6/59:8--KK45r   c                R    t        |      }|| j                  v r| j                  |= yy)zpDelete application-defined data for `appid` without raising and error
        if `appid` doesn't exist.
        Nr   )r   r!   _appids      r   discardzAppData.discardG   s+     u%TYY		&! r   c                d    | j                   j                         D ]  }|j                  |        y r   )r   r'   
write_tags)r   	tagwriterr   s      r   
export_dxfzAppData.export_dxfO   s,    II$$& 	'D  &	'r   N)returnNone)r!   strr@   boolr@   int)r@   zIterable[Tags])r!   rB   r@   r   )r(   r   r@   rA   )r!   rB   r   zIterable[Sequence]r@   rA   )r!   rB   r>   r   r@   rA   )__name__
__module____qualname__r   r"   r%   r(   r+   r.   r8   r;   r?    r   r   r   r      s/    ,1"	%$"'r   c                  v    e Zd ZdZdddZddZddZddZddZe	ddd       Z
dd	Zdd
ZddZddZddZy)r   zHandle storage for related reactors.

    Reactors are other objects related to the object that contains this
    Reactor() instance.

    Nc                ,    t        |xs g       | _        y r   r.   reactorsr   handless     r   r   zReactors.__init__\   s    "%gm"4r   c                ,    t        | j                        S )z$Returns count of registered handles.)r$   rN   r   s    r   r%   zReactors.__len___   s    4==!!r   c                    || j                   v S )z+Returns ``True`` if `handle` is registered.)rN   r   handles     r   r"   zReactors.__contains__c   s    &&r   c                4    t        | j                               S )z/Returns an iterator for all registered handles.)iterr+   r   s    r   __iter__zReactors.__iter__g   s    DHHJr   c                ,    t        | j                        S )zReturns a copy.)r   rN   r   s    r   copyzReactors.copyk   s    &&r   c                l    | | d      S t        |      dk  rt        d       | d |dd D              S )zCreate Reactors() instance from tags.

        Expected DXF structure:
        [(102, '{ACAD_REACTORS'), (330, handle), ..., (102, '}')]

        Args:
            tags: list of DXFTags()

        N   zACAD_REACTORS errorc              3  4   K   | ]  }|j                     y wr   )r-   )r1   rT   s     r   r3   z%Reactors.from_tags.<locals>.<genexpr>   s     :VFLL:s      r4   )r$   r   )clsr(   s     r   	from_tagszReactors.from_tagso   sA     <t9t9q=#$9:::tAbz:;;r   c                2    t        | j                  d       S )z.Returns all registered handles as sorted list.c                    t        | d      S )N   )base)rE   )xs    r   <lambda>zReactors.get.<locals>.<lambda>   s    3qr? r   )key)sortedrN   r   s    r   r+   zReactors.get   s    dmm)BCCr   c                ,    t        |xs g       | _        y)zReset all handles.NrM   rO   s     r   r.   zReactors.set   s    GMr*r   c                :    | j                   j                  |       y)zAdd a single `handle`.N)rN   r8   rS   s     r   r8   zReactors.add   s    &!r   c                :    | j                   j                  |       y)zDiscard a single `handle`.N)rN   r;   rS   s     r   r;   zReactors.discard   s    f%r   c                    |j                  t        t               | j                         D ]  }|j                  t        |        |j                  t        d       y )Nr5   )
write_tag2r   r   r+   r   )r   r>   rT   s      r   r?   zReactors.export_dxf   sH    _m<hhj 	>F  !4f=	>_c2r   r   )rP   Optional[Iterable[str]]rD   )rT   rB   r@   rC   )r@   zIterator[str])r@   r   )r(   zOptional[Tags]r@   r   )r@   z	list[str])rP   rm   r@   rA   )rT   rB   r@   rA   )rT   rB   rF   )rG   rH   rI   __doc__r   r%   r"   rW   rY   classmethodr_   r+   r.   r8   r;   r?   rJ   r   r   r   r   T   sN    5"' ' < <"D+"&3r   N)
__future__r   typingr   r   r   r   r   ezdxf.lldxf.typesr	   r
   ezdxf.lldxf.tagsr   ezdxf.lldxf.constr   r   r   r   r   ezdxf.lldxf.tagwriterr   __all__ERR_INVALID_DXF_ATTRIBERR_DXF_ATTRIB_NOT_EXITSr   r   rJ   r   r   <module>ry      sX    # H H 3 ! <  7j
!> < :' :'zA3 A3r   