
    'j                        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dS )    )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                  V    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dS )!r   returnNonec                ,    t                      | _        d S N)dictdataselfs    P/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/entities/appdata.py__init__zAppData.__init__   s    %)VV			    appidstrboolc                .    t          |          | j        v S )z?Returns ``True`` if application-defined data exist for `appid`.r
   r   r   r    s     r   __contains__zAppData.__contains__   s    U##ty00r   intc                *    t          | j                  S )zReturns the count of AppData.)lenr   r   s    r   __len__zAppData.__len__   s    49~~r   Iterable[Tags]c                4    | j                                         S r   )r   valuesr   s    r   tagszAppData.tags#   s    y!!!r   r   c                r    	 | 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&   sE    	%9]51122 	% 	% 	%e$$$	%s    6r.   c                V    t          |          r|d         j        }|| j        |<   dS dS )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   s9    
 t99 	$GME#DIe	$ 	$r   r   Iterable[Sequence]c                n   t          d |D                       }t          |          }|d         t          |fk    r)|                    dt	          t          |                     |d         t          dfk    r(|                    t	          t          d                     |                     |           dS )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          ||          V  d S r   )r	   ).0coder3   s      r   	<genexpr>zAppData.add.<locals>.<genexpr>?   s0      @@KD%F4''@@@@@@r   r   }N)r   r
   r   insertr	   appendr4   )r   r    r   s      r   addzAppData.add:   s    
 @@4@@@@@e$$7...KK6/599:::8---KK44555r   c                J    t          |          }|| j        v r
| j        |= dS dS )zpDelete application-defined data for `appid` without raising and error
        if `appid` doesn't exist.
        Nr$   )r   r    _appids      r   discardzAppData.discardG   s6     u%%TY	&!!! r   	tagwriterr   c                h    | j                                         D ]}|                    |           d S r   )r   r-   
write_tags)r   rC   r   s      r   
export_dxfzAppData.export_dxfO   s@    I$$&& 	' 	'D  &&&&	' 	'r   N)r   r   )r    r!   r   r"   r   r'   )r   r+   )r    r!   r   r   )r.   r   r   r   )r    r!   r   r5   r   r   )r    r!   rC   r   r   r   )__name__
__module____qualname__r   r&   r*   r.   r1   r4   r?   rB   rF    r   r   r   r      s        , , , ,1 1 1 1   " " " "	% 	% 	% 	%$ $ $ $   " " " "' ' ' ' ' 'r   c                  ~    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dS )(r   zHandle storage for related reactors.

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

    NhandlesOptional[Iterable[str]]c                2    t          |pg           | _        d S r   r4   reactorsr   rN   s     r   r   zReactors.__init__\   s    "%gm"4"4r   r   r'   c                *    t          | j                  S )z$Returns count of registered handles.)r)   rR   r   s    r   r*   zReactors.__len___   s    4=!!!r   handler!   r"   c                    || j         v S )z+Returns ``True`` if `handle` is registered.)rR   r   rU   s     r   r&   zReactors.__contains__c   s    &&r   Iterator[str]c                D    t          |                                           S )z/Returns an iterator for all registered handles.)iterr1   r   s    r   __iter__zReactors.__iter__g   s    DHHJJr   c                *    t          | j                  S )zReturns a copy.)r   rR   r   s    r   copyzReactors.copyk   s    &&&r   r.   Optional[Tags]c                    | | 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  $   K   | ]}|j         V  d S r   )r3   )r8   rU   s     r   r:   z%Reactors.from_tags.<locals>.<genexpr>   s$      ::VFL::::::r      r;   )r)   r   )clsr.   s     r   	from_tagszReactors.from_tagso   s\     <3t99t99q==#$9:::s::tAbDz:::;;;r   	list[str]c                0    t          | j        d           S )z.Returns all registered handles as sorted list.c                $    t          | d          S )N   )base)r'   )xs    r   <lambda>zReactors.get.<locals>.<lambda>   s    3qr??? r   )key)sortedrR   r   s    r   r1   zReactors.get   s    dm)B)BCCCCr   r   c                2    t          |pg           | _        dS )zReset all handles.NrQ   rS   s     r   r4   zReactors.set   s    GMr**r   c                :    | j                             |           dS )zAdd a single `handle`.N)rR   r?   rW   s     r   r?   zReactors.add   s    &!!!!!r   c                :    | j                             |           dS )zDiscard a single `handle`.N)rR   rB   rW   s     r   rB   zReactors.discard   s    f%%%%%r   rC   r   c                    |                     t          t                     |                                 D ]}|                     t          |           |                     t          d           d S )Nr<   )
write_tag2r   r   r1   r   )r   rC   rU   s      r   rF   zReactors.export_dxf   se    _m<<<hhjj 	> 	>F  !4f====_c22222r   r   )rN   rO   rG   )rU   r!   r   r"   )r   rX   )r   r   )r.   r^   r   r   )r   re   )rN   rO   r   r   )rU   r!   r   r   )rU   r!   rH   )rI   rJ   rK   __doc__r   r*   r&   r[   r]   classmethodrd   r1   r4   r?   rB   rF   rL   r   r   r   r   T   s        5 5 5 5 5" " " "' ' ' '       ' ' ' ' < < < < [<"D D D D+ + + +" " " "& & & &3 3 3 3 3 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   rL   r   r   <module>r~      sN   # " " " " " H H H H H H H H H H H H H H 3 3 3 3 3 3 3 3 ! ! ! ! ! ! < < < < < < < <           8777777j
!> < :' :' :' :' :' :' :' :'zA3 A3 A3 A3 A3 A3 A3 A3 A3 A3r   