B
    Ob                @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d dlmZ ed
d ddZyd dlmZ d dlmZ W n< ek
r   edejejB Zdd Zdd ZeZY nX dddZ e!dZ"d"ddZ#d#ddZ$dd  Z%d$d"d#Z&d$d% Z'd&d' Z(d%d(d)Z)d*d+ Z*d&d,d-Z+d'd/d0Z,d1d2 Z-d3d4 Z.d(d5d6Z/d7d8 Z0d)d:d;Z1d<d= Z2e3d>kr
d d?lm4Z4 e4dd@ edA5e6dB d dCl7m8Z8 dDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐddddddddddddddddddddddddddddddddd ddddddgZ9ddd	d
dddddg	Z:ddddddddddg
Z;ddddgZ<dd Z=e=  ed d! dS (*      N)get_content_type_for_model)override)login_requireduser_passes_test)DatabaseError)ProgrammingError)cache)cprint)UUIDEncoderc             C   s   | j o
| jS )N)Z	is_activeZis_staff)user r   +G:\easytimepro\master/mysite/admin\utils.py<lambda>       r   z/login/)Z	login_url)get_client_ip)is_public_ipa  
        ^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
        (?<!127)(?<!^10)(?<!^0) 
            #1) `127.*` is loop address 
            #2) `10.*` is private address
            #3) `0.*` is illegal
        \.# first digit
        ([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?<!192\.168)(?<!172\.(16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31))
        \.# second digit # in python `re` negative lookbehind need to be fixed-width
        ([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
        \.# third digit
        ([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
        (?<!\.255$)$ # filter broadcast IPs
        # last digit
        c             C   s   t | d k	rdS dS )NTF)public_addr_patternsearch)ipr   r   r   r   6   s    r   c             C   s<   | j d}|s| j d}n|dd  }|t|fS )a6  
        [simple but not robust]
        Get the incoming request's originating IP, looks first for X_FORWARDED_FOR header, which is provided by some
        PaaS platforms, since the Django REMOTE_ADDR is affected by internal routing.  Fallback to the REMOTE_ADDR if
        the header is not present
        ZHTTP_X_FORWARDED_FORZREMOTE_ADDR,r   )ZMETAgetsplitstripr   )requestZx_forwarded_forr   r   r   r   _get_client_ip:   s
    r   adddelete)ZGeneralActionNewZGeneralActionDelete)r   viewr   ZchangeFc                s    fdd|   D S )Nc                s   i | ]\}}|  |qS r   )Zget_json_data).0fe)escape_htmlr   r   
<dictcomp>[   s    z%export_error_dict.<locals>.<dictcomp>)items)Z
error_dictr!   r   )r!   r   export_error_dictZ   s    r$   Tc             C   s\   ddl m} ddlm}m}m}m} i }|j}d|krH||d< ||d< n||d< ||d< |S )Nr   )settings)EASYWDMSEASYTIMEPROEASYTIMEPRO_TITLEEASYWDMS_TITLEattsoftware_typesoftware_title)django.confr%   mysite.admin.constr&   r'   r(   r)   SALE_MODULE)Zload_finishr%   r&   r'   r(   r)   Z	type_dictZauthorized_modsr   r   r   get_software_type^   s    
r0   c        	      C   sb   ddl m}  ddlm}m}m}m}m}m} d| j	krP| j
rF|}|}qX|}|}n|}|}||dS )Nr   )r%   )r&   r'   r(   r)   INTELLIGENTTIMEINTELLIGENTTIME_TITLEr*   )r,   r+   )r-   r%   r.   r&   r'   r(   r)   r1   r2   r/   ZCLOUD_VERSION)	r%   r&   r'   r(   r)   r1   r2   r,   r+   r   r   r   get_software_type_without_loadl   s     
r3   __c             C   sR   ddl m} y| j|}W n  |k
r<   t||d }Y nX |rNt|d|S |S )Nr   )FieldDoesNotExistZverbose_name)Zdjango.db.models.fieldsr5   Z_metaZ	get_fieldgetattr)clsZadminZ
field_nameZ	separatorr5   r   r   r   r   get_field_verbose_name   s    r8   c             C   s   t t| }|S )N)r   user_login_required)Z	view_funcZdecorated_view_funcr   r   r   effective_user_required   s    r:   c             C   sl   ddl }t| }xFt|d| dd ddD ](}dt|   || | < q,W d		|
d}|S )
uN   
    驼峰表示法 -> 匈牙利表示法

    :param text:
    :return:
    r   Nz[A-Z]c             S   s   |   S )N)span)xr   r   r   r      r   z"hungary_notation.<locals>.<lambda>T)keyreverse_ )relistsortedfinditerstrgrouplowerstartendjoinr   )textrA   Z	text_listmZ	formattedr   r   r   hungary_notation   s     (rM   c             C   s   |  d}t|}|s4|d }|dd }|d8 }nd}x,|D ]$}t|d| krTP ||  q>W ||d }|d| S )uo   
    匈牙利表示法 -> 驼峰表示法

    :param text:
    :param first_letter_capital:
    :return:
    r?   r      Nr@      )r   lenappendtitlerJ   )rK   Zfirst_letter_capitalZstr_listZoriginal_lenZ	first_strsr   r   r   
camel_hump   s    


rT   c             C   sb   |\}}t | tjs"| dd}n| }t|d }|d krBt|}dj|dj||dd}||fS )N__name__r@   z{app}.{perm}z{verb}_{target})verbtarget)appZperm)
isinstancesixstring_typesr   BUILD_IN_PERMISSIONrM   format)Zaction_classinfoZ	app_labelZ
model_nameaction_namerV   Z	perm_namer   r   r   get_permission_name   s    r`   c       	      C   s   ddl m} ddlm} ddlm} | }|d kr>| }n||dd f}||f}|jj| t	||d
d }|r|  d S )	Nr   )timezone)	timedelta)AdminLogrO   )Zminutes)actionZcontent_typeZop_time__rangez-op_time)Zdjango.utilsra   Zdatetimerb   mysite.base.modelsrc   nowobjectsfilterr   Zorder_byZlastr   )	r_   modelZ
start_timera   rb   rc   rf   Z	time_spanZlast_commit_logr   r   r   trace_back_last_log   s    
rj   r@   c                s<  t jd dkrddlm} nddlm} ddlm} ddlm} ddl	m
}	 ddlm}
 dd	lm} dd
lm} ddlm} ddlm} t| \}}|jr| d |krdt|kr|dd}ndt|kr|dd}|jj| j||||| |d n<t tjr|
j  d  t|t!t"t#fr6t$%|}nt|tjrFnt&dt'|rtt(d  | }W d Q R X nHt|tjrt)||	krt*d+|	d |d |	 }n|}nt&d fdd}t|tjr|, sd}|}g }nt|t"t!fs|g}xt-|D ]x\}}t|tj.r2|||| nRt|tjr\|, r\|||t/| n(t|tjrt)|dkr|||| qW t!|dd |}t$j%dd |D t0d}d1d d |D }|| j|||t2t)|r|d n j3||||d!	}y|4  W n. |k
r6 } zt*|d W d d }~X Y nX d S )"Nr      )filterfalse)ifilterfalse)r%   )r   )MAX_ACTION_NAME)zk_site)tasks)rc   )r3   )r&   r+   zOutDoor Mng=None,zOutDoor Mng=Noner@   zOutDoor Mng(0->None),)messagesri   action_statuszBmessages is either one of string types or json-encode-able format.z_[WARNING] action_name shall not exceed the maximum length({}). Otherwise, it will be truncated.ZredzIaction_name is either one of string types or non-argument callable objectc                s*    d krt d jj|d | |< d S )Nz;If obj is integer key, then Caller must provide model_class)pk)
ValueErrorrg   rh   first)rg   irs   )ri   r   r   
_handle_pk  s    z!log_operation.<locals>._handle_pk$   c             S   s   | d kS )Nr   )r<   r   r   r   r   "  r   zlog_operation.<locals>.<lambda>c             S   s   g | ]}t |d dqS )rs   r@   )r6   )r   objr   r   r   
<listcomp>#  s    z!log_operation.<locals>.<listcomp>)r7   r   c             S   s   g | ]}d j |dqS )z{obj})ry   )r]   )r   ry   r   r   r   rz   $  s    )	r   rd   Z
ip_addresscan_routableZcontent_type_iddescriptiontargetstargets_reprrr   )5sysversion_info	itertoolsrl   rm   r-   r%   	django.dbr   Zmysite.base.db_constrn   Zmysite.adminro   Zmysite.baserp   re   rc   Zmysite.admin.utilsr3   r.   r&   r   ZACTIVE_CELERYrE   replaceZlog_recorderZdelayr   rY   rZ   r[   Z	_registryr   rB   tupledictjsondumps	TypeErrorcallabletranslation_overriderP   r	   r]   isdigit	enumerateZinteger_typesintr
   rJ   r   rs   Zsave)r   rg   rd   rq   ri   rr   rm   r%   r   rn   ro   rp   rc   r3   r&   r   r{   r_   rw   r}   r~   rv   ry   logr    r   )ri   r   log_operation   s    



r   c             K   s^   ddl m} |dd }| p,dt| | j}|d k	rB|t| S t||rV|jd S |S d S )Nr   )AdminRuntimeWarningZfieldz{}: {})Zmysite.admin.exceptionsr   r   r]   typeargsrE   rY   )r    kwargsr   Zcorrelated_fieldZoriginal_msgr   r   r   get_error_message2  s    

r   c                s    t    j fdd| D S )Nc                s    g | ]}| ks|s|qS r   r   )r   r<   )seenseen_addr   r   rz   B  s    z-remove_duplicate_elements.<locals>.<listcomp>)setr   )seqr   )r   r   r   remove_duplicate_elements?  s    r   c             C   s0   | | |}t||s,t||s(| }n|}|S )N)r   rY   )r=   Z_dictexpect_typedefaultvaluer   r   r   get_args_form_dictF  s    

r   c          	   C   sB   yt | }W n ttfk
r,   | }Y nX t||s>| }|S )N)r   loadsr   rt   rY   )sourcer   Zdecodedr   r   r   load_from_jsonP  s    
r   r   c             C   s4   y"ddl m} || ||fg W n   Y nX |S )Nr   )no_model_permissions)Zmysite.admin.dispatchersr   register)categoryrW   rV   r   r   r   r   insert_non_model_permission[  s    r   c             C   sx   ddl m} ddlm} | dkr.| }|S | dkrJ|d|}|S y|| |}W n tk
rr   d}Y nX |S )zj
    get model class from app library
    :param model:
    :param app:
    :return: registered model
    r   )apps)get_user_modelr   rF   ZauthN)Zdjango.appsr   Zdjango.contrib.authr   rG   	get_modelLookupError)rX   ri   r   r   Z_modelr   r   r   r   d  s    
r   __main__)init)r   z
testing {}Zyellow)chainz192.167.4.254z
172.15.1.4z193.201.224.199z199.195.250.21z95.213.140.210z139.199.4.159z68.183.25.90z80.211.103.184z117.122.211.82z193.70.81.236z112.76.28.250z188.166.243.186z112.2.63.32z103.89.91.28z183.196.34.195z196.52.84.26z211.253.31.232z58.250.79.7z111.230.177.250z182.100.67.8z185.246.128.25z115.230.127.92z193.201.224.232z62.28.222.4z111.73.46.25z120.211.24.29z65.246.187.19z193.105.134.97z206.189.105.167z111.23.28.189z42.7.27.166z151.80.178.67z182.100.67.201z80.82.70.136z193.201.224.12z54.38.213.82z202.115.160.252z114.214.198.45z142.93.224.112z104.248.204.211z58.218.92.23z112.85.42.150z104.248.204.232z68.183.27.53z62.28.7.213z117.21.173.59z180.169.129.221z153.149.184.96z221.2.158.154z68.183.23.25z94.23.145.124z193.70.6.197z187.118.167.231z104.248.51.24z191.209.221.192z152.245.184.114z185.244.25.131z183.196.168.147z183.196.185.197z152.240.4.90z152.245.198.4z191.207.14.64z179.161.63.87z199.116.118.233z118.43.1.36z1.189.21.101z188.92.77.235z142.93.201.137z183.196.36.253z183.196.183.200z142.93.182.116z77.72.82.39z183.196.36.252z202.120.61.120z209.141.59.248z179.150.191.242z94.177.205.34z112.53.206.201z193.201.224.214z112.85.42.193z112.85.42.233z222.186.50.156z61.188.189.7z218.82.35.213z211.19.160.23z164.52.44.210z114.212.184.2z187.69.168.179z223.89.72.2z177.113.30.205z222.188.117.108z42.7.27.164z36.189.253.232z94.23.179.195z212.35.17.41z122.114.180.13z175.182.91.104z206.189.109.201z221.229.207.86z114.214.198.192z180.153.69.53z42.7.26.142z123.249.88.31z112.35.25.129z183.196.178.167z111.73.46.15z59.81.76.249z5.135.89.197z218.17.208.163z222.186.58.137z183.245.210.182z61.244.206.98z178.62.238.124z193.201.224.216z182.18.19.162z128.199.48.82z178.62.252.53z191.10.179.222z123.249.13.16z115.230.127.91z61.153.35.140z61.153.35.141z58.218.92.36z174.138.9.93z43.225.180.25z152.241.182.83z58.218.92.51z112.85.42.234z36.102.223.232z116.255.193.132z142.93.208.217z152.240.83.177z203.195.155.127z112.16.1.179z122.114.6.85z220.194.43.34z112.85.42.196z180.149.243.101z36.152.12.134z218.61.195.36z119.195.232.237z221.130.52.126z119.207.197.198z117.149.162.126z222.161.56.246z178.224.16.133z138.197.153.191z179.128.170.236z183.196.45.23z112.85.42.201z211.40.198.242z187.118.108.101z120.92.159.112z205.185.115.43z203.116.101.182z183.196.172.36z80.211.14.181z191.20.45.155z118.145.13.86z104.248.137.152z183.250.216.151z177.198.32.11z118.24.110.25z87.27.31.41z120.211.23.202z211.141.124.25z185.188.182.129z182.97.92.175z79.243.209.235z119.10.29.122z106.75.126.123z46.231.127.146z179.119.178.44z111.73.46.162z112.53.206.200z210.245.34.220z62.149.222.149z193.112.62.125z219.144.16.162z204.9.137.111z108.61.250.223z1.237.178.28z104.248.59.3z108.116.253.127z58.218.92.26z58.218.92.37z79.129.163.6z95.111.60.45z178.228.31.185z180.169.6.104z187.69.41.156z198.46.198.121z191.10.174.181z153.163.126.53z125.237.147.159z58.218.92.47z115.231.218.176z115.238.100.208z58.218.56.102z221.4.54.100z203.69.30.62z149.28.20.58z5.196.79.62z180.169.56.208z128.0.48.103z221.0.91.34z221.10.131.237z120.211.26.232z183.196.183.126z36.37.174.245z187.116.167.81z177.113.78.33z42.7.27.165z92.222.91.104z192.3.247.123z123.207.77.152z125.64.90.163z5.23.53.244z58.218.205.241z23.239.67.37z179.241.105.141z187.118.223.42z112.53.205.234z112.53.201.170z43.226.71.51z112.116.83.195z179.171.43.83z58.218.92.44z210.73.208.165z129.146.64.30z124.117.241.152z104.248.14.88z61.142.106.4z209.97.146.88z187.118.198.53z178.128.175.205z80.211.69.177z14.118.216.64z191.209.252.152z188.92.75.240z178.128.168.117z192.241.150.89z173.249.9.155z152.240.102.113z202.103.207.211z142.44.143.102z66.96.211.198z191.207.60.48z116.58.186.123z177.213.7.63z179.102.210.58z119.57.103.250z213.192.94.102z177.53.146.182z1.179.182.186z179.146.211.163z179.85.199.119z191.10.142.200z106.75.165.94z117.50.2.247z220.191.194.22z40.76.42.56z179.171.12.161z103.224.166.68z120.211.23.203z179.90.151.93z183.196.39.110z219.151.35.224z129.28.64.187z152.242.46.109z183.196.185.162z180.76.57.178z118.24.159.18z58.218.92.46z45.63.121.137z59.46.15.218z219.150.218.202z183.196.44.105z209.92.176.11z189.96.60.136z194.140.128.3z112.53.206.56z125.64.90.167z152.252.56.170z104.248.19.227z177.79.71.233z176.240.182.248z167.99.73.54z179.240.237.250z211.251.237.142z58.220.10.214z179.91.170.195z5.36.217.164z58.218.66.210z61.153.236.190z1.34.147.252z177.79.16.104z119.27.187.98z152.241.181.13z202.79.18.69z202.144.156.244z1.26.177.178z218.4.104.194z222.93.96.163z180.222.164.223z112.53.196.86z179.128.23.48z179.171.35.109z117.67.110.138z
14.1.29.70z36.41.185.111z179.119.194.151z178.128.217.171z116.26.74.167z116.26.75.176z183.196.185.151z128.199.202.151z94.158.46.7z112.85.42.151z61.153.148.147z179.128.13.232z58.218.92.41z
90.88.21.8z159.89.197.91z114.67.238.215z209.97.156.123z128.199.226.229z58.218.56.94z158.140.138.187z107.172.5.115z179.90.79.249z188.242.150.98z112.53.204.175z179.170.149.189z202.128.79.34z42.116.7.139z159.203.75.90z123.26.190.250z174.138.6.227z111.61.107.90z152.253.102.24z223.111.182.119z218.204.106.14z183.196.222.229z58.218.92.42z108.61.229.83z120.211.27.131z152.243.116.176z109.234.209.34z223.111.136.213z58.218.92.50z118.70.177.33z109.248.9.9z139.59.81.236z115.37.73.91z191.207.18.218z179.86.235.131z43.254.240.20z183.196.222.203z179.92.107.110z123.207.67.54z159.65.132.101z190.2.147.155z179.224.172.2z179.90.28.173z212.237.43.223z182.162.104.218z45.58.137.143z179.246.208.45z111.230.107.18z120.211.27.152z158.140.138.243z188.225.10.114z181.229.78.224z191.23.173.113z183.196.214.87z152.240.195.132z152.247.195.235z45.252.248.178z177.161.208.233z191.195.188.234z211.138.132.75z117.50.1.153z112.85.42.230z27.191.235.90z167.99.2.154z119.90.39.158z24.11.111.112z211.253.29.3z104.248.224.156z120.211.38.66z58.218.66.86z112.5.254.90z205.185.119.229z203.93.109.130z111.61.107.91z5.188.10.156z111.61.49.128z177.113.126.186z119.192.113.96z194.36.173.58z114.80.157.210z191.28.75.190z92.116.148.134z183.196.165.8z54.38.215.153z120.211.27.45z106.113.72.42z
2.44.14.52z137.74.148.234z221.147.43.83z183.196.185.165z191.246.183.45z120.211.37.70z115.153.199.90z114.80.118.59z220.130.148.106z47.58.138.186z185.19.158.43z119.29.133.14z86.12.185.201z118.24.93.167z58.218.92.25z178.166.78.231z191.27.30.207z50.115.166.167z119.36.178.218z183.196.29.113z120.211.24.112z179.90.70.240z205.185.113.69z92.46.36.240z120.211.22.100z188.212.103.162z179.90.32.109z51.255.16.202z187.69.227.76z120.92.214.12z	5.9.80.55z183.196.38.100z179.171.100.123z112.85.42.102z117.132.163.149z179.160.242.147z80.211.29.215z213.57.1.156z158.140.137.59z80.211.69.84z5.188.10.182z120.211.25.234z119.29.174.166z120.211.24.253z191.27.57.224z179.86.82.171z120.211.24.4z206.189.177.207z191.29.43.190z191.14.252.115z179.146.110.202z189.97.135.157z103.110.96.41z173.212.244.32z179.171.80.79z191.23.137.121z94.102.52.195z154.80.151.137z51.68.187.153z151.106.9.33z51.68.196.105z51.15.248.211z177.213.18.48z202.109.244.26z145.249.104.168z179.86.234.80z112.53.206.59z92.233.63.21z104.248.235.78z68.183.36.15z124.29.233.24z120.211.23.96z117.36.157.226z87.15.207.170z117.21.191.108z120.157.38.97z120.211.27.40z61.34.89.227z119.10.72.173z69.73.136.183z118.89.25.129z113.53.133.222z183.196.209.95z121.124.124.73z191.195.84.177z179.86.115.199z191.14.59.127z178.33.169.154z193.112.49.230z124.193.89.187z177.58.27.18z183.82.115.111z202.77.100.235z205.185.113.79z120.211.24.113z120.237.124.115z202.201.38.86z177.53.146.24z103.89.91.129z191.22.186.70z114.207.154.2z117.21.191.218z185.244.25.212z58.218.92.35z103.58.116.8z219.135.194.73z191.24.184.108z185.135.83.177z183.196.188.195z179.85.6.211z183.196.39.171z118.174.133.139z117.132.159.78z175.142.19.129z211.25.119.131z125.64.90.165z150.95.104.34z104.248.235.234z58.87.122.46z187.141.143.180z61.177.172.30z203.19.35.67z94.177.207.228z182.153.120.27z179.128.71.231z46.17.46.54z177.161.83.73z106.75.146.213z222.195.93.238z179.86.220.46z189.95.204.248z177.113.115.92z27.17.61.146z91.202.222.69z202.119.113.101z183.196.44.104z138.68.19.29z183.196.44.109z116.246.28.80z119.29.80.17z211.47.191.21z165.227.222.208z178.128.236.173z165.227.123.225z52.221.105.77z58.218.92.28z58.218.92.43z138.219.200.49z144.217.12.147z124.158.13.136z183.196.222.245z179.160.192.36z159.203.106.238z110.185.166.137z78.129.130.57z120.211.22.173z191.246.85.179z
31.4.7.195z167.99.159.226z153.250.1.195z112.47.15.253z177.161.191.12z187.116.161.21z152.251.204.222z211.20.17.220z86.142.85.168z221.139.104.121z54.38.213.78z62.210.99.4z179.166.48.62z185.200.116.219z89.197.155.66z222.186.153.105z154.120.225.74z177.58.110.131z179.171.123.36z185.8.50.212z78.129.250.186z218.89.52.93z104.248.67.219z111.61.107.113z183.196.222.200z123.249.71.250z205.185.121.253z51.38.119.185z185.56.11.130z104.248.141.127z223.89.72.205z185.244.25.144z177.79.72.54z139.199.203.201z138.121.128.42z187.118.108.77z177.161.153.217z173.120.168.158z179.91.20.247z104.248.230.143z183.196.41.71z183.196.222.208z139.180.218.233z118.25.63.24z179.128.201.27z80.211.91.223z104.248.230.146z142.93.62.175z177.77.48.104z104.248.238.200z178.128.227.41z123.206.34.194z183.196.42.34z209.45.96.43z209.97.132.104z54.38.155.46z2.84.58.241z185.20.115.50z191.20.204.206z183.196.39.104z179.165.127.134z132.232.82.244z179.245.25.97z177.113.106.91z179.91.190.139z152.245.161.38z118.24.40.100z191.23.133.120z43.225.180.10z178.128.227.28z221.212.34.204z61.184.101.40z58.218.92.39z119.29.76.117z112.53.194.157z111.61.109.157z149.248.9.30z187.141.34.46z37.187.78.136z181.113.123.18z109.228.16.244z80.211.35.87z114.80.207.141z80.211.14.45z186.66.163.242z95.213.252.227z221.204.11.243z37.49.231.40z54.36.225.205z58.218.92.45z120.132.69.237z209.97.151.176z104.248.25.223z180.76.102.228z180.232.96.172z111.40.120.33z212.224.143.68z101.71.240.182z123.180.188.56z114.112.93.72z216.108.232.128z
52.4.32.40z159.65.163.112z139.59.127.29z104.236.75.213z154.16.137.207z106.75.63.24z68.185.174.82z142.93.248.41z104.248.65.176z211.206.101.113z178.16.20.66z185.200.116.203z210.245.119.1z103.207.39.105z222.186.160.38z103.89.91.63z185.157.183.102z142.93.248.40z183.131.3.156z117.21.191.208z206.189.72.214z42.7.27.163z58.218.92.32z67.208.111.150z209.141.56.183z178.62.242.117z178.128.255.7z217.61.5.31z104.248.33.23z123.235.37.141z103.89.89.205z118.186.36.50z61.177.172.57z103.114.105.139z193.201.224.208z5.101.40.101z61.111.6.102z98.202.176.193z163.172.130.149z46.17.42.221z218.61.16.26z
172.16.0.9z
172.16.4.1z
172.17.1.1z
172.31.5.7z	127.0.0.2z10.0.1.5z10.0.0.1z10.155.155.155z10.255.255.254z999.999.999.999.z
108.0.0.01z0.1.2.3z00.0000.00.00z192.168.l.1z912.456.123.123z.3.3.3.0z192.168.o.0z0.0.0.0z
0.123.24.2z60.123.247.255z196.168.255.255z10.255.255.255z192.168.255.255c              C   sn   x"t D ]} t| std| qW t dr>tttt	}ntt}x"|D ]} t| rLtd| qLW d S )Nz{} Should return Truer   z{} Should return False)
public_ip_listr   AssertionErrorr]   globalsr   r   local_ip_listinvalid_ip_listbroadcast_ip_list)r   Zinvalidr   r   r   test_is_publicf  s    

r   ztest passedZgreen)F)T)r4   )T)N)r@   Nr   )N)r   )>r   rA   r   Zdjango.contrib.admin.optionsr   rZ   Zdjango.utils.translationr   r   Zdjango.contrib.auth.decoratorsr   r   r   r   r   Zdjango.core.cacher   Zmysite._utilsr	   Zmysite.utilsr
   r9   Zipwarer   Zipware.utilsr   ImportErrorcompileMVERBOSEr   r   r\   	frozensetZNATIVE_PERMISSION_SETr$   r0   r3   r8   r:   rM   rT   r`   rj   r   r   r   r   r   r   r   rU   r   r]   __file__r   r   r   r   r   r   r   r   r   r   r   <module>   s  
	X
	


