U
    H4f
                     @   sl   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ e 	e
ZddgZG dd deZG d	d dZdS )
    N)etree)
exceptions)NotSet)Element	AttributeAttributeGroupc                       sP   e Zd Zd fdd	Zdd ZdddZd	d
 Z fddZ fddZ  Z	S )r   NFc                    s"   t  j|||d || _d | _d S )N)nametype_default)super__init__required
array_type)selfr   r	   r   r
   	__class__ ?/tmp/pip-unpacked-wheel-04z2hmy8/zeep/xsd/elements/attribute.pyr      s    zAttribute.__init__c              	   C   s8   z| j |W S  ttfk
r2   td Y d S X d S )Nz&Error during xml -> python translation)typeZpythonvalue	TypeError
ValueErrorlogger	exception)r   valuer   r   r   parse   s
    
zAttribute.parsec                 C   s@   |d t fkr| jsd S | || | j|}|| j| d S N)r   r   validater   Zxmlvaluesetqname)r   parentr   render_pathr   r   r   render   s
    zAttribute.renderc              
   C   sZ   z| j j|| jd W n> tjk
rT } ztjd| j|jf |dW 5 d }~X Y nX d S )N)r   z!The attribute %s is not valid: %s)path)r   r   r   r   ZValidationErrorr   message)r   r   r    excr   r   r   r   $   s    zAttribute.validatec                    s$   | dd }t j||}||_|S )Nr   )popr   cloner   )r   argskwargsr   newr   r   r   r&   -   s    zAttribute.clonec                    s,   t   }| j | _| jr(| j |_|S r   )r   resolver   r   )r   retvalr   r   r   r*   3   s
    
zAttribute.resolve)NFN)N)
__name__
__module____qualname__r   r   r!   r   r&   r*   __classcell__r   r   r   r   r      s   
		c                   @   s2   e Zd Zdd Zedd Zdd Zdd	d
ZdS )r   c                 C   s:   t |tjst|}|j| _|| _d | _|| _d| _d S )NT)	
isinstancer   QName	localnamer   r   r   _attributes	is_global)r   r   
attributesr   r   r   r   <   s    
zAttributeGroup.__init__c                 C   s6   g }| j D ]&}t|tr&||j q
|| q
|S r   )r3   r0   r   extendr5   append)r   resultattrr   r   r   r5   F   s    

zAttributeGroup.attributesc                 C   sN   g }| j D ]8}| }|d k	s"tt|tr8|| q
|| q
|| _ | S r   )r3   r*   AssertionErrorr0   listr6   r7   )r   Zresolved	attributer   r   r   r   r*   P   s    

zAttributeGroup.resolveNTc                    s   d  fdd| jD S )Nz, c                 3   s   | ]}|  V  qd S r   )	signature).0r9   schemar   r   	<genexpr>]   s     z+AttributeGroup.signature.<locals>.<genexpr>)joinr3   )r   r@   
standaloner   r?   r   r=   \   s    zAttributeGroup.signature)NT)r,   r-   r.   r   propertyr5   r*   r=   r   r   r   r   r   ;   s
   

	)logginglxmlr   Zzeepr   Zzeep.xsd.constr   Zzeep.xsd.elements.elementr   	getLoggerr,   r   __all__r   r   r   r   r   r   <module>   s   
-