o
    Zi                     @   s   d dl m  mZ d dlmZ ddlmZmZm	Z	 ddiZ
dejdejfd	d
ZdejddfddZdejdede	fddZdejdefddZdejdee fddZdedefddZdS )    N)List   )AbnRecordV1AbnLookupError	AddressV1nsz(http://abr.business.gov.au/ABRXMLSearch/rootreturnc                 C   s4   dD ]}|  d| t}|d ur|  S qtd)N)businessEntity202001businessEntity201408businessEntity201205businessEntity200709businessEntity200506businessEntityz.//ns:u@   No se encontró ningún nodo businessEntity en la respuesta XML.)findXML_NSr   )r   tagentity r   F/var/www/html/flask_server/apps/abn_lookup_app/abn_lookup_v1/parser.py_find_business_entity   s   r   c                 C   sL   |  dt}|d u rd S |jddtd}|jddtd}td| d| )Nz.//ns:exceptionzns:exceptionCode default
namespaceszns:exceptionDescriptionzError desde ABR: z - )r   r   findtextr   )r   	exceptioncodedescr   r   r   _check_exception   s   r   r   tag_namec                 C   s   |  d| t}|du rt S t|jddtdpd|jddtdp#d|jddtdp,d|jddtdp5d|jd	dtdp>d|jd
dtdpGd|jddtdpPd|jddtdpYddS )uR   
    Extrae una dirección (física principal o postal) en formato AddressV1.
    zns:Nzns:addressLine1r   r   zns:addressLine2zns:addressLine3zns:addressLine4z	ns:suburbzns:stateCodezns:postcodezns:countryCode)line1line2line3line4suburb
state_codepostcodecountry_code)r   r   r   r   )r   r    addrr   r   r   _extract_address"   s   r*   c                 C   sN   | j ddtd}| j ddtd}| j ddtd}dd |||fD }d|S )	up   
    Arma un nombre legal para individuos (cuando aplica).
    Para compañías normalmente estará vacío.
    zns:legalName/ns:familyNamer   r   zns:legalName/ns:givenNamezns:legalName/ns:otherGivenNamec                 S   s   g | ]}|r|qS r   r   ).0pr   r   r   
<listcomp>?   s    z'_extract_legal_name.<locals>.<listcomp> )r   r   join)r   familygivenotherpartsr   r   r   _extract_legal_name6   s
   
r4   c                 C   s<   g }|  dtD ]}|jddtdpd}|r|| q|S )Nzns:businessNamezns:organisationNamer   r   )findallr   r   append)r   namesbnnamer   r   r   _extract_business_namesC   s   
r:   xml_strc                 C   s  t | }t| t|}|jddtd }|jddtd}|r&| }nd}|jddtdp1d}|jddtdp;d}|jddtdpEd}|jd	dtdpOd}|jd
dtdpYd}	t|}
t|}t	|d}t	|d}|
dt}d}d}d}|dur|jddtdpd}|jddtdpd}t|}|jddtd}|r| }n
|jddtdpd}t|||	|
|||||||||||dS )u   
    Parsea el XML devuelto por ABR y devuelve un AbnRecordV1.
    Extrae la mayor cantidad posible de campos (versión 1 extendida).
    zns:ABN/ns:identifierValuer   r   z ns:ASICNumber/ns:identifierValueNz#ns:entityStatus/ns:entityStatusCodez ns:entityStatus/ns:effectiveFromzns:entityType/ns:entityTypeCodez"ns:entityType/ns:entityDescriptionzns:mainName/ns:organisationNamemainBusinessPhysicalAddressmainPostalAddresszns:goodsAndServicesTaxFzns:effectiveFromzns:effectiveTozns:recordLastUpdatedDatez.//ns:dateRegisterLastUpdated)abnacn	main_name
legal_namebusiness_namesstatus_codestatus_fromentity_type_codeentity_type_descmain_business_addresspostal_addressgst_registeredgst_effective_fromgst_effective_tolast_updated_date)ET
fromstringr   r   r   r   stripr4   r:   r*   r   boolr   )r;   r   r   r>   r?   rC   rD   rE   rF   r@   rA   rB   rG   rH   gst_nodegst_fromgst_torI   last_updatedr   r   r   parse_abn_v1L   s\   




rU   )xml.etree.ElementTreeetreeElementTreerM   typingr   modelsr   r   r   r   Elementr   r   strr*   r4   r:   rU   r   r   r   r   <module>   s    
	