3
Z@                 @   s  d dl Z d dlZeje je jd d dlZd dlZd dlZd dl	Z	d dl
T G dd dZedkrd dlZej ZejeZg ZxTej D ]HZeeZyejeZee je W q ek
r   eje Y qX qW ej  x:eD ]2Zeej  ej ZxeD ]Zede qW qW dS )    N)Zdomain	localedir)*c               @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )PhysicalDevicec             C   s:   d | _ d | _d | _d| _d | _| j| i | _tj| _	d S )NF)
devices_network_hostdnssd_hostname_cupsserverfirsturi
add_device
_user_data	ppdippstrZbackends
_ppdippstr)selfdevice r   2/usr/share/system-config-printer/PhysicalDevice.py__init__   s    
zPhysicalDevice.__init__c             C   sf   t |drT|jjdd}|jjdd}|dks@|j j|j rF|}qZd||f }n|j}tjj|S )Nid_dictZMFG ZMDLz%s %s)	hasattrr   getlower
startswithmake_and_modelcupshelpersppdsppdMakeModelSplit)r   r   mfgmdlr   r   r   r   _canonical_id)   s    
zPhysicalDevice._canonical_idc             C   s4   |d krd S d|kr,d|kr,|dkr,|d S |S d S )N.:Z	localhostz.localr   )r   hostnamer   r   r   _add_dot_local_if_needed7   s    z'PhysicalDevice._add_dot_local_if_neededc             C   sh   y"t j|dt jdd d d }W n@   y"t j|dt jdd d d }W n   d }Y nX Y nX |S )Nr   )Zfamily   )socketZgetaddrinfoZAF_INETZAF_INET6)r   r"   addressr   r   r   _get_address@   s    zPhysicalDevice._get_addressc       
   	   C   s`  d }d }d }t jj|\}}|dks,|dkrd }|jdrRt jj|dd  \}}|d k	r|jdrr|dd  }q|jdr|dd  }q|jd	r|dd  }qdS qdS n0|d
ks|dkrdS t jj|\}}|d krdS | rt jj|\}}|r&d }	y| j|}	|	r|	}W n   Y nX n&|rLy| j|}W n   d }Y nX | j|| j|fS )NhpZhpfaxz/net/   zip=   z	hostname=	   zzc=ZdnssdZmdns)NN)NN)NN)NN)	urllibparseZ	splittyper   Z
splitqueryZ	splithostZ	splitportr'   r#   )
r   uriZhostporthost	dnssdhostschemerestZipparamZportZipr   r   r   _get_host_from_uriL   sN    





z!PhysicalDevice._get_host_from_uric             C   s:  | j s| jr| j|j\}}t|dr2| j|j}t|drP|d krP| j|j}|d kr`|d ks|rt| j rt|| j kp|r| jr|| jkp|r| j r|| j kp|o| jo|| jk s|d kr| jd ks|d kr| j d krtn| j	|\}}| j
d kr.|| _|| _|j | _|j | _|jjdd| _g | _
nXdd }|| j|| _|| j|| _|jjdd}|dkr| jdkr|| jkrt|jdkr|jjdd|_|jjd	r|jjd
dks|jjds|jjdr|jjdrd| _n| jr d S x"| j
D ]}|j|jkrd S qW | js4|j| _| j
j| | j
j  | j  s^| j r|jdkr| j|j\| _ }|r|| _t|dr| j d kr|j}	|	r| j|	| _ t|dr| jd kr|j}
|
r| j|
| _| jr | j d kr y| j|
| _ W n   d | _ Y nX td|jt| f  d S )Nr&   r"   ZSNr   c             S   s    dd }|||| k r|S | S )Nc             S   s>   | j  }d}x,tt| D ]}|| | | kr|d7 }qW |S )Nr      )r   rangelen)slnir   r   r   count_lower   s    z>PhysicalDevice.add_device.<locals>.nicest.<locals>.count_lowerr   )abr;   r   r   r   nicest   s    z)PhysicalDevice.add_device.<locals>.nicestr%   z:9100zipp:z
/printers/r4   zdnssd:zmdns:z/cupsTZnetworkz&Device %s added to physical device: %s) r   r   r3   r.   r   r#   r&   r"   
ValueErrorr   r   r   r   r   Z	mfg_lowerZ	mdl_lowerr   r   sntypereplacer   findendswithr   r	   appendsortZdevice_classr'   Z
debugprintrepr)r   r   r/   r0   r   r   r>   rA   dr&   r"   r   r   r   r
   ~   s    









"

zPhysicalDevice.add_devicec             C   s   | j S )N)r   )r   r   r   r   get_devices   s    zPhysicalDevice.get_devicesc             C   s  | j d jjdr(| j d jjddks^| j d jjdsL| j d jjdr| j d jjdr| jspd| j }nL| j s| jjd	dkrd| j }n(| j| jkrd
| j| jf }n
d| j }nF| jdks| jdkr| jjdr| j	j
| j d j}nd| j| jf }| jrt| jdks4| jrt| jdkr| j d jjds\| j d jjdol| j d jjd r| j s|j| jdkr| j s|j| jdkr| js|d| j 7 }n,| js|d| j 7 }n|d| j| jf 7 }nt| jdkr|d| j 7 }|S )Nr   zipp:z
/printers/r4   zdnssd:zmdns:z/cupsz%sr!   z%s (%s)r   ZHPZFaxz%s %sz (%s)z	 (%s, %s)r?   r?   r?   r?   )r   r.   r   rD   rE   r   r   r   r   r   r   infor6   rA   )r   rK   r   r   r   get_info   sB    


zPhysicalDevice.get_infoc             C   s   || j |< d S )N)r   )r   keyvaluer   r   r   set_data  s    zPhysicalDevice.set_datac             C   s   | j j|S )N)r   r   )r   rM   r   r   r   get_data  s    zPhysicalDevice.get_datac             C   s   d| j   S )Nz(description: %s))__repr__)r   r   r   r   __str__  s    zPhysicalDevice.__str__c             C   s    d| j | j| j| j| j| jf S )Nz3<PhysicalDevice.PhysicalDevice (%s,%s,%s,%s,%s,%s)>)r   r   rA   r   r   r	   )r   r   r   r   rQ     s    zPhysicalDevice.__repr__c       
      C   s  t |t | krdS | j s*t| jdkrn|j s@t|jdkrn| j sVt| jdkrn|j pjt|jdkpR| jrt| jdkr|jrt|jdkr| j|jkpR| jrt| jdkr|jrt|jdkr| j|jkpR| jrt| jdkr|jrt|jdkr| j|jkpR| joRt| jdkoR|joRt|jdkoR| j|jksZdS |j }|rdd | jD }x|D ]}|j|kr~dS q~W |jdkr|jdks| jdkr| jdkr|jdkr| jdkr| jd |jd kS dS dd }|| \}}||\}}	||kr&dS |d	krN| j	dkrN| j	|j	krNdS ||	kr\dS | j	dkst|j	dkrxdS | j	|j	kS )
NFr   c             S   s   g | ]
}|j qS r   )r.   ).0xr   r   r   
<listcomp>7  s    z)PhysicalDevice.__eq__.<locals>.<listcomp>Tr   c             S   s`   | j dks | jj j| j j r(| j}nd| j | jf }tjj|\}}tjj|tjj|fS )Nr   z%s %s)r   r   r   r   r   r   r   	normalize)devr   r   r   r   r   r   split_make_and_modelF  s     
z3PhysicalDevice.__eq__.<locals>.split_make_and_modelr(   )
rB   r   r6   r   rJ   r   r.   r   r   rA   )
r   otherdevsurisrW   rX   our_mfgour_mdl	other_mfg	other_mdlr   r   r   __eq__  sV    

	
$
zPhysicalDevice.__eq__c       
      C   s  t |t | krdS | |kr dS | j|jkrT| jd kr:dS |jd krHdS | j|jk S | j|jkr| jd krndS |jd kr|dS | j|jk S |j }|rdd | jD }x|D ]}|j|krdS qW |jdkr|jdks| jdko| jdkr*|jdko| jdkr| jd |jd k S |jdko(|jdkS dd }|| \}}||\}}	||kr\||k S ||	krn||	k S | jdks|jdkrdS | j|jk S )	NFTc             S   s   g | ]
}|j qS r   )r.   )rS   rT   r   r   r   rU   {  s    z)PhysicalDevice.__lt__.<locals>.<listcomp>r   r   c             S   s`   | j dks | jj j| j j r(| j}nd| j | jf }tjj|\}}tjj|tjj|fS )Nr   z%s %s)r   r   r   r   r   r   r   rV   )rW   r   r   r   r   r   r   rX     s     
z3PhysicalDevice.__lt__.<locals>.split_make_and_model)	rB   r   r   rJ   r   r.   r   r   rA   )
r   rY   rZ   r[   rW   rX   r\   r]   r^   r_   r   r   r   __lt__`  sJ    





	

zPhysicalDevice.__lt__N)__name__
__module____qualname__r   r   r#   r'   r3   r
   rJ   rL   rO   rP   rR   rQ   r`   ra   r   r   r   r   r      s   
	2d+Br   __main__ )configgettextinstallZPACKAGEr   r   Zurllib.parser,   r   r%   debugr   rb   ZauthconnZ
ConnectioncZ
getDevicesr   Zphysicaldevicesvaluesr   Zphysicaldeviceindexr:   r
   r@   rF   rG   printrL   rJ   r   r   r   r   <module>   s:      




