
    }fI                         d dl Z d dlZd dlmZmZ d dlZd dlZd dlmZ  e       Z	 ej                  d       G d de             Z G d d	      Z G d
 de      ZddZd ZddZddZddZd Zd Zy)    N)DictList)contentlineParserT)auto_excc                   n    e Zd ZU  ej                  d      Zeed<    ej                  d      Ze	ed<   y)
ParseError )defaultlinenrN)
__name__
__module____qualname__attribr   str__annotations__r   int     P/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/ics/grammar/parse.pyr   r      s,    #D##dggb!B!r   r   c                   v    e Zd ZdZd Zd Zi dfdedeeee   f   defdZ	d	 Z
d
 Zd Zd Zedd       Zd Zy)ContentLinead  
    Represents one property line.

    For example:

    ``FOO;BAR=1:YOLO`` is represented by

    ``ContentLine('FOO', {'BAR': ['1']}, 'YOLO'))``

    Args:

        name:   The name of the property (uppercased for consistency and
                easier comparison)
        params: A map name:list of values
        value:  The value of the property
    c                     | j                   |j                   k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  }|S N)nameparamsvalue)selfotherrets      r   __eq__zContentLine.__eq__*   sH    yyEJJ& ){{ell*)zzU[[( 	 
r   c                 &    | j                  |       S r   )r#   )r    r!   s     r   __ne__zContentLine.__ne__0   s    ;;u%%%r   r	   r   r   r   c                 J    |j                         | _        || _        || _        y r   )upperr   r   r   )r    r   r   r   s       r   __init__zContentLine.__init__3   s    JJL	
r   c           	          d}| j                   D ]3  }|dj                  |dj                  | j                   |               z  }5 dj                  | j                  || j                        S )Nr	   z;{}={},z{}{}:{})r   formatjoinr   r   )r    
params_strpnames      r   __str__zContentLine.__str__8   s`    
[[ 	OE(//%$++e:L1MNNJ	O		:tzzBBr   c                     dj                  | j                  t        | j                        t        | j                        dkD  rd| j                        S d| j                        S )Nz2<ContentLine '{}' with {} parameter{}. Value='{}'>   sr	   )r+   r   lenr   r   r    s    r   __repr__zContentLine.__repr__>   sX    CJJIIt{{#a'CJJ	
 	
 .0JJ	
 	
r   c                      | j                   |   S r   r   )r    items     r   __getitem__zContentLine.__getitem__F   s    {{4  r   c                 H    |D cg c]  }| c}| j                   |<   y c c}w r   r7   )r    r8   valuesvals       r   __setitem__zContentLine.__setitem__I   s    ,23SS3D3s   	c                    d|v sd|v rt        d      	 t        j                  |      }dj                  |d         }dj                  |d         }i }|j                  dg       D ]?  }dj                  |d         }|d   D 	cg c]  }	dj                  |	d          }
}	|
||<   A  | |||      S # t        j                  j
                  $ r t        ||      w xY wc c}	w )	z:Parse a single iCalendar-formatted line into a ContentLine
z-ContentLine can only contain escaped newlinesr	   r   r   r   r;   )	
ValueErrorGRAMMARparsetatsu
exceptionsFailedTokenr   r,   get)clsr   r   astr   r   r   	param_ast
param_namexparam_valuess              r   rC   zContentLine.parseL   s     4<44<LMM	'--%C wws6{#G%2. 	.I6!23J9B89LMABGGAgJ/MLM!-F:	. 4'' ++ 	'T2&&	' Ns   B2 C2*Cc                 v    | j                  | j                  t        | j                        | j                        S zMakes a copy of itself)	__class__r   dictr   r   r4   s    r   clonezContentLine.clone_   s(     ~~diidkk):DJJGGr   N)r   )r   r   r   __doc__r#   r%   r   r   r   r(   r/   r5   r9   r=   classmethodrC   rR   r   r   r   r   r      sq    "& BDRT S $sDI~*> C 
C
!4 ( ($Hr   r   c                   N     e Zd ZdZdedef fdZd Zd Ze	d        Z
d Z xZS )		ContainerzRepresents an iCalendar object.
    Contains a list of ContentLines or Containers.

    Args:

        name: the name of the object (VCALENDAR, VEVENT etc.)
        items: Containers or ContentLines
    r   itemsc                 :    t         t        |   |       || _        y r   )superrV   r(   r   )r    r   rW   rP   s      r   r(   zContainer.__init__o   s    i'.	r   c                     | j                   }d|z   g}| D ]  }|j                  t        |              |j                  d|z          dj                  |      S )NzBEGIN:zEND:
)r   appendr   r,   )r    r   r"   r   s       r   r/   zContainer.__str__s   sU    yy$ 	"DJJs4y!	"

6D=!{{3r   c                 v    dj                  | j                  t        |       t        |       dkD  rd      S d      S )Nz"<Container '{}' with {} element{}>r1   r2   r	   )r+   r   r3   r4   s    r   r5   zContainer.__repr__{   s7    3VDIIs4yTQ#G	HDFG	Hr   c                 P   g }|D ]  }|j                   dk(  r0|j                  t        j                  |j                  |             B|j                   dk(  r6|j                  |k7  r%t        dj                  ||j                               n|j                  |         | |g| S )NBEGINENDzExpected END:{}, got END:{})r   r\   rV   rC   r   r   r+   )rH   r   tokenized_linesrW   r   s        r   rC   zContainer.parse   s    # 		#DyyG#Y__TZZIJe#::%$5<<T4::NP PT"		# 4 %  r   c                     | j                  | j                        }| D ]!  }|j                  |j                                # |S rO   )rP   r   r\   rR   )r    celems      r   rR   zContainer.clone   s:    NN499% 	#DHHTZZ\"	#r   )r   r   r   rS   r   r   r(   r/   r5   rT   rC   rR   __classcell__)rP   s   @r   rV   rV   e   s?    S $  H ! !r   rV   c              #     K   t        | t        j                  j                        st	        d      d}d}t        |       D ]w  \  }}t        |j                               dk(  r#|s|}|j                  d      }9|d   dv r||dd  j                  d      z  }X|r||f n| |}|j                  d      }y |r|r||f y | y y w)Nz.Parameter `physical_lines` must be an iterabler   r	   r   r@   ) 	r1   )
isinstancecollectionsabcIterabler   	enumerater3   strip)physical_lineswith_linenr
current_nrcurrent_liner   r   s         r   unfold_linesrs      s     nkoo&>&>?IJJJLn- ,Dtzz|!J::d+L!W#DHNN400L ,..""J::d+L, l**	 s   C
Cc              #      K   | D ]H  }t        |t              rt        j                  |d   |d          2t        j                  |       J y w)Nr1   r   )ri   tupler   rC   )unfolded_linesr   s     r   tokenize_linerw      sK      *dE"##DGT!W55##D))	*s   AAc                     g }| D ]R  }|j                   dk(  r0|j                  t        j                  |j                  |              B|j                  |       T |S )Nr_   )r   r\   rV   rC   r   )ra   
block_nameresr   s       r   rC   rC      sP    
C 99JJytzz?CDJJt	
 Jr   c                 z    |rt        t        t        | d                  S t        dj	                  |       |      S )NT)rp   r[   )rC   rw   rs   string_to_containerr,   )lineslinewises     r   lines_to_containerr      s2    ]<4#HIJJ"6;;u#5x@@r   c                 d    |rt        | j                  d      |      S t        t        |             S )Nr?   )r   splitrC   string_to_content_lines)txtr~   s     r   r|   r|      s+    !#))D/8<<,S122r   c           	   #     K   t        j                  dd|       } t        j                  | d      }|D ]  }|d   }dj	                  |d         }dj	                  |d         }i }|j                  dg       D ]?  }dj	                  |d         }|d	   D cg c]  }dj	                  |d          }	}|	||<   A t        |||        y c c}w w)
Nz?
[ 	]r	   full)	rule_namer   r   r   r   r;   )resubrB   rC   r,   rG   r   )
r   rI   r   r   r   r   rJ   rK   rL   rM   s
             r   r   r      s     
&&r3
'C
--v-
.C 	/AwwwtF|$W&(B/ 	.I6!23J9B89LMABGGAgJ/MLM!-F:	. $..	/ Ns   BCC0 Cc                 N    t        | t              st        d      t        |       S )NzExpecting a string)ri   r   	TypeErrorr|   )strings    r   calendar_string_to_containersr      s#    fc",--v&&r   )Fr   )T)rj   r   typingr   r   r   rD   ics.grammar.contentliner   rB   r2   	Exceptionr   r   listrV   rs   rw   rC   r   r|   r   r   r   r   r   <module>r      s     	    5 
 " " "
JH JHZ. .b6*A3/'r   