
    TOg                         S SK r S SKrS SKrS SKJrJrJr  SSKJr  SSK	J
r
  SSKJr  \R                  " \5      r\R                   " \ R"                  R%                  SS5      S	9   " S
 S5      rg)    N)AnyListDict   )str_to_date)ParameterContext)DataContextLOGLEVELINFO)levelc                       \ rS rSrSrS\\   S\\   4S jrS\S\	SS4S	 jr
S
\S\4S jrS\S\	SS4S jrS\\\4   SS4S jrS\S\	SS4S jrS\S\	SS4S jrS\S\	SS4S jrSrg)Domain   a  
A class to represent a standarized result of a whois lookup

# Attributes
* Attributes are created dynamically,
not all domains have currently the same amount.

- name: str, the domain name
- tld: str, the detected top level domain
- name_servers: List, a list of detected name servers
- DNSSEC: boolean

- status: List
- registrar: str
- registrant: str
- registrant_country:
- emails: List

- updated_date: datetime
- expiration_date: datetime
- creation_date: datetime

Methods
-------
def init(pc: ParameterContext,dc: DataContext) -> None:
    initialize the object with the current data from dc.data: Dict[str, Any]
    the init is separated from creating an instance as we want to use dependency injection as much as possible.
datareturnc                 V    SU;   a"  UR                  S5      nUR                  U5        U$ )N )indexpop)selfr   r   s      Q/Users/admin/workspace/ai/Jarvis/env/lib/python3.13/site-packages/whois/domain.py_cleanupArrayDomain._cleanupArray6   s(     :JJrNEHHUO    pcdcNc                 ~   / nUR                   S    H}  n[        U[        5      (       a/  UR                  UR	                  5       R                  5       5        MG  U H0  nUR                  UR	                  5       R                  5       5        M2     M     / U l        U H  nUR	                  S5      nU(       d  M  SU;   a%  UR                  SS5      u  pFUR	                  S5      nUR                  5       nX@R                  ;  d  Mi  U R                  R                  U5        M     [        U R                  5      U l        g )Nname_serversz . r   )	r   
isinstancestrappendstriplowerr   splitsorted)r   r   r   tmpxy_s          r   _doNameserversDomain._doNameservers?   s    
 (A!S!!

1779??,- 

1779??,-  ) (*AAq!8773?DAAGGI---%%,,Q/  #4#4#45r   itemc                 
   SU;   a;  [         R                  " SU5      nU(       a  US   (       a  US   R                  5       $ SU;   a;  [         R                  " SU5      nU(       a  US   (       a  US   R                  5       $ U$ )Nzicann.org/epp#z)\s*\(?https?://(www\.)?icann\.org/epp#\s*r   z-identitydigital.au/get-au/whois-status-codes#z<\s*https://identitydigital\.au/get-au/whois-status-codes#\s*)rer%   r#   )r   r-   ress      r   cleanStatusDomain.cleanStatus\   sl    t#((GNCs1v1v||~%:dB((Z\`aCs1v1v||~%r   c           	      @   UR                   S   S   R                  5       U l        UR                  (       a   U R	                  U R                  5      U l        [        [        UR                   S    Vs1 s H  o3R                  5       iM     sn5      5      U l        SU R                  ;   a   U R                  U R                  5      U l        UR                  (       a>  / nU R                   H%  nU R	                  U5      nUR                  U5        M'     X@l        g g s  snf )Nstatusr   r   )
r   r#   r4   stripHttpStatusr1   r&   liststatusesr   r"   )r   r   r   szr-   s         r   	_doStatusDomain._doStatusi   s    
 ggh'*002**4;;7DK
 RWWX%67%6'')%678
  ..t}}=DMA''- & M  8s   2Dc           	         SU;   a  US   S   R                  5       U l        SU;   a  US   S   R                  5       U l        SU;   a  US   S   R                  5       U l        SU;   a=  SU;   a  US   S   R                  5       U l        OUS   S   R                  5       U l        SU;   a  US   S   R                  5       U l        SU;   al  [        [        US    Vs1 s H  o"R                  5       iM     sn5      5      U l        S	U R                  ;   a!  U R                  U R                  5      U l        g g g s  snf )
Nownerr   abuse_contactreseller
registrantregistrant_organizationadminemailsr   )
r#   r=   r>   r?   r@   rB   r&   r6   rC   r   )r   r   r8   s      r   _doOptionalFieldsDomain._doOptionalFields   s6    d?gq)//1DJd"!%o!6q!9!?!?!AD ,Q/557DM4(D0"&'@"A!"D"J"J"L"&|"4Q"7"="="?d?gq)//1DJt !h8Aggi89DK T[[ "00= ! 
 9s   D;c                 <   UR                   S   S   R                  5       U l        UR                   S   S   R                  5       U l        [	        UR                   S   S   U R
                  5      U l        [	        UR                   S   S   U R
                  5      U l        [	        UR                   S   S   U R
                  5      U l        UR                   S   U l	        U R                  X5        U R                  X5        U R                  UR                   5        g )N	registrarr   registrant_countrycreation_dateexpiration_dateupdated_dateDNSSEC)r   r#   rG   rH   r   tldrI   rJ   last_updateddnssecr:   r+   rD   r   r   r   s      r   
_parseDataDomain._parseData   s     -a0668"$''*>"?"B"H"H"J ))A!)DdhhO*2773D+Ea+H$((S'(?(BDHHMggh'rB# 	rww'r   c                     g )N rP   s      r   __init__Domain.__init__   s    
 	r   c                 J   UR                   (       a  UR                  b  UR                  U l        UR                  b  UR                  U l        g UR
                  0 :X  a  g UR
                   n[        R                  U5        SnXBR
                  ;   a3  UR
                  S   S   R                  5       R                  5       U l
        SnXBR
                  ;   a"  UR
                  U   R                  5       U l        UR                  (       a+  UR                  (       a  [        UR                  5      U l        UR"                  (       a=  UR$                  U l        SU l        U R$                  (       a  U R$                  S   U l        UR(                  SL a  g U R+                  X5        g )Ndomain_namer   rM   r   T)include_raw_whois_textwhoisStrtextexeptionStr
_exceptionr   logdebugr#   r$   namerM   withPublicSuffixhasPublicSuffixr!   publicSuffixStrpublic_suffixextractServersserversserver#return_raw_text_for_unsupported_tldrQ   )r   r   r   msgks        r   initDomain.init   s+   
 $$)@DI>>% nnDO77b=			#<.q1779??ADI<wwqz'')DH2#5#5&)"*<*<&=D::DLDK||"ll2.11T9r   )r^   r>   rB   rI   rO   rC   rJ   rN   ra   r   r=   re   r@   rH   rG   r?   rh   rg   r4   r7   r\   rM   )__name__
__module____qualname____firstlineno____doc__r   r!   r   r   r	   r+   r1   r:   r   r   rD   rQ   rU   rl   __static_attributes__rT   r   r   r   r      s    :3i 
c66 6 
	6:    
	4 >38n > 
 >D(( ( 
	(,  
	& &  &  
	& r   r   )osr/   loggingtypingr   r   r   handleDateStringsr   context.parameterContextr   context.dataContextr	   	getLoggerrn   r_   basicConfigenvirongetr   rT   r   r   <module>r~      s^    
 	   + 6 ,!   "**..V< =R  R r   