
    Kc@                        d dl Z d dlZ ej        e j        e j                   d dlZd dlZd dlZd dl	Z	d dl
T  G d d          Zedk    rd dlZ ej                    Z ej        e          Zg Ze                                D ]^Z ee          Z	 e                    e          Zee                             e           ?# e$ r e                    e           Y [w xY we                                 eD ]FZ ee                                           e                                ZeD ]Z ede           EdS dS )    N)domain	localedir)*c                   b    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )PhysicalDevicec                     d | _         d | _        d | _        d| _        d | _        |                     |           i | _        t          j        | _	        d S )NF)
devices_network_hostdnssd_hostname_cupsserverfirsturi
add_device
_user_data	ppdippstrbackends
_ppdippstr)selfdevices     2/usr/share/system-config-printer/PhysicalDevice.py__init__zPhysicalDevice.__init__   sO    !"    #,    c                 n   t          |d          r|j                            dd          }|j                            dd          }|dk    s9|                                                    |                                          r|}n|d|}n|j        }t          j                            |          S )Nid_dictMFG MDL )	hasattrr   getlower
startswithmake_and_modelcupshelpersppdsppdMakeModelSplit)r   r   mfgmdlr"   s        r   _canonical_idzPhysicalDevice._canonical_id)   s    FI&& 		4.$$eR00C.$$eR00CbyyCIILL33SYY\\BBy!$,/CC!5$3^11>BBBr   c                 4    |d S d|vrd|vr|dk    r|dz   S |S )N.:	localhostz.local )r   hostnames     r   _add_dot_local_if_neededz'PhysicalDevice._add_dot_local_if_needed7   s9    43(??$$h&&Or   c                     	 t          j        |dt           j                  d         d         d         }nE#  	 t          j        |dt           j                  d         d         d         }n	#  d }Y nxY wY nxY w|S )Nr   )family   )socketgetaddrinfoAF_INETAF_INET6)r   r.   addresss      r   _get_addresszPhysicalDevice._get_address@   s    	(106@ @ @@ACCDFFGIGG	 ,Xq4:OE E EEFHHIKKLNs    36 A83A-,A8-A31A8c                 L   d }d }d }t           j                            |          \  }}|dk    s|dk    rd }|                    d          r*t           j                            |dd                    \  }}|b|                    d          r|dd          }nx|                    d          r|dd          }nX|                    d	          r|dd          }n8d
S d
S |dk    s|dk    rd
S t           j                            |          \  }}|d
S |r"t           j                            |          \  }}|r$d }		 |                     |          }	|	r|	}n)#  Y n%xY w|r 	 |                     |          }n	#  d }Y nxY w|                     |          |                     |          fS )Nhphpfaxz/net/   zip=   z	hostname=	   zzc=)NNdnssdmdns)	urllibparse	splittyper!   
splitquery	splithost	splitportr8   r/   )
r   urihostporthost	dnssdhostschemerestipparamportips
             r   _get_host_from_uriz!PhysicalDevice._get_host_from_uriL   s   	//55T>>Vw..G(( E"(,"9"948"D"Dw"%%e,, &&qrr{HH''55 &&qrr{HH''.. & 'II%:!zw&F"2"2 :%|55t<<Xt!z 	=!<118<<LT4 	B&&t,, D 	((33,,T22)))445 	5s   9E EE3 3E9c                 D   | j         s| j        r|                     |j                  \  }}t	          |d          r|                     |j                  }t	          |d          r||                     |j                  }||b|r| j         r|| j         k    s<|r| j        r|| j        k    s(|r| j         r|| j         k    s|r$| j        r|| j        k    r|| j        	|| j         t          n| 	                    |          \  }}| j
        h|| _        || _        |                                | _        |                                | _        |j                            dd          | _        g | _
        nmd } || j        |          | _         || j        |          | _        |j                            dd          }|dk    r| j        dk    r|| j        k    rt          |j        dk    r |j                            dd          |_        |j                            d          r|j                            d	          d
k    sN|j                            d          s|j                            d          r"|j                            d          rd| _        n	| j        rd S | j
        D ]}|j        |j        k    r d S | j        s|j        | _        | j
                            |           | j
                                         | j         r| j        s6|j        dk    r+|                     |j                  \  | _         }|r|| _        t	          |d          r*| j         #|j        }	|	r|                     |	          | _         t	          |d          r*| j        #|j        }
|
r|                     |
          | _        | j        r1| j         *	 |                     |
          | _         n#  d | _         Y nxY wt=          d|j        dt?          |                      d S )Nr7   r.   SNr   c                 @    d } ||           ||           k     r|S | S )Nc                     |                                  }d}t          t          |                     D ]}||         | |         k    r|dz  }|S )Nr      )r    rangelen)slnis       r   count_lowerz>PhysicalDevice.add_device.<locals>.nicest.<locals>.count_lower   sO    GGJJ!&Q ' 'A tqt|| !Q r   r-   )abr\   s      r   nicestz)PhysicalDevice.add_device.<locals>.nicest   s8    ! ! ! #{Aa88 Hr   r3   z:9100ipp:
/printers/dnssd:mdns:/cupsTnetworkzDevice z added to physical device: ) r
   r   rP   rG   r   r/   r7   r.   
ValueErrorr(   r	   r&   r'   r    	mfg_lower	mdl_lowerr   r   sntypereplacer!   findendswithr   r   appendsortdevice_classr8   
debugprintrepr)r   r   rI   rJ   r&   r'   r_   rj   dr7   r.   s              r   r   zPhysicalDevice.add_device~   s    -	%!4 -	%"55vzBBOD)++ E44V^DD,, K1B 99&/JJ	!2 "3"0 "3T/// 0"1 0T000 1#'#5 1$"444 5#'#6 5$"555!4!<!d&8&@  ++V44JS#|#!$!$ .,,dB77!
 
 
 "648S11!648S11^''r22882"--$$;(""++Wb99FJJ!!&)) 		JOOL))R//Z""8,, 0Z""7++ 0 J(( 0
  $D 	F 	 	Au
"" #
 } 	("JDMV$$$" 	1$*= 	1)++ ''44 *D	 1&/#VY'' 	LD,>,FnG L%)%B%B7%K%K"VZ(( 	NT-@-HH N&*&C&CH&M&M# 	*D$6$>*%)%6%6x%@%@""*%)"""
JJJT


, 	- 	- 	- 	- 	-s   O+ +	O6c                     | j         S N)r	   r   s    r   get_deviceszPhysicalDevice.get_devices   s
    |r   c                    | j         d         j                            d          r)| j         d         j                            d          dk    so| j         d         j                            d          s%| j         d         j                            d          r| j         d         j                            d          rp| j        sd| j        z  }n| j        r| j                            d	          dk    rd| j        z  }n| j        | j        k    r| j        d
| j        d}nwd| j        z  }nl| j        dk    s%| j        dk    rE| j                            d          r+| j	        
                    | j         d         j                  }n| j        d| j        }| j        rt          | j                  dk    s | j        rt          | j                  dk    r| j         d         j                            d          s%| j         d         j                            d          r%| j         d         j                            d          s| j        r|                    | j                  dk    rf| j        r|                    | j                  dk    rA| j        s|d| j        z  z  }nQ| j        s|d| j        z  z  }n<|d
| j        d| j        dz  }n%t          | j                  dk    r|d| j        z  z  }|S )Nr   r`   ra   rb   rc   rd   re   z%sr+   z ()r   HPFaxr   z (%s)z, )r	   rG   r!   rm   rn   r   r
   r&   r'   r   r   inforW   rj   )r   r}   s     r   get_infozPhysicalDevice.get_info   s    LO**622 	2LO$$\22b88\!_ ++H55 9\!_ ++G44 9 LO((11 9 & 5d00' 54+=+B+B3+G+G2+M+Md11%)<<<(,(;(;(;T=O=O=OPDD$"44DDX^^H!4!4U!;!;?&&Q(<==DD"hhh1D 	&C);$<$<q$@$@  %A%($*=%>%>%B%Bl1o!,,X66 &Cl1o!,,W55 &C l1o!**733 &C #	 &C
 YYt)**b00$ 1YYt*++r11& P$"444' P$"555t':':':D<N<N<NOO$']]QGdg%%Dr   c                     || j         |<   d S rv   )r   )r   keyvalues      r   set_datazPhysicalDevice.set_data  s    $r   c                 6    | j                             |          S rv   )r   r   )r   r   s     r   get_datazPhysicalDevice.get_data  s    ""C(((r   c                 0    d|                                  z  S )Nz(description: %s))__repr__rw   s    r   __str__zPhysicalDevice.__str__  s    "T]]%5%555r   c                 h    d| j         d| j        d| j        d| j        d| j        d| j        dS )Nz <PhysicalDevice.PhysicalDevice (,z)>)r&   r'   rj   r
   r   r   rw   s    r   r   zPhysicalDevice.__repr__  sF     4888TWWWd.@.@.@$$$dmmm5 	6r   c                    t          |          t          |           k    rdS | j        rt          | j                  dk    r_|j        rt          |j                  dk    r@| j        rt          | j                  dk    r!|j        rSt          |j                  dk    s:| j        rGt          | j                  dk    r/|j        r(t          |j                  dk    r| j        |j        k    s| j        rGt          | j                  dk    r/|j        r(t          |j                  dk    r| j        |j        k    s| j        rGt          | j                  dk    r/|j        r(t          |j                  dk    r| j        |j        k    sP| j        rGt          | j                  dk    r/|j        r(t          |j                  dk    r| j        |j        k    sdS |                                }|r"d | j        D             }|D ]}|j        |v r dS |j        dk    r|j        dk    s| j        dk    r?| j        dk    r4|j        dk    r'| j        dk    r| j        d         |j        d         k    S dS d } ||           \  }} ||          \  }}	||k    rdS |dk    r| j	        dk    r| j	        |j	        k    rdS ||	k    rdS | j	        dk    s|j	        dk    rdS | j	        |j	        k    S )NFr   c                     g | ]	}|j         
S r-   rG   .0xs     r   
<listcomp>z)PhysicalDevice.__eq__.<locals>.<listcomp>7      000aAE000r   Tr   c                    | j         dk    sC| j                                                            | j                                                   r| j        }n| j         d| j        }t          j                            |          \  }}t          j                            |          t          j                            |          fS Nr   r   r&   r'   r    r!   r#   r$   r%   	normalizedevr"   r&   r'   s       r   split_make_and_modelz3PhysicalDevice.__eq__.<locals>.split_make_and_modelF      w"}} 0 0 ; ;SW]]=M=M N N}!$,/GGGSWW!=$);;^LLJS#$..44$..446 6r   r:   )
rk   r
   rW   r   rx   r	   rG   r&   r'   rj   
r   otherdevsurisr   r   our_mfgour_mdl	other_mfg	other_mdls
             r   __eq__zPhysicalDevice.__eq__  sW   <<4;;&&5( 	C1C,D,D,I,I) -J-0%2E-F-F!-K-K) .L-0$2E-F-F!-K-K* .Lu+,,11# 2(+T-?(@(@1(D(D$ )E),e.A)B)BQ)F)F#u':::$ ;),d.A)B)BQ)F)F% *G*-u/C*D*Dq*H*H$(<<<# =(+T-?(@(@1(D(D% )E*-u/C*D*Dq*H*H#u';;;$ <),d.A)B)BQ)F)F$ *G),e.A)B)BQ)F)F$(;;;5  "" 	 004<000D    7d??44 # Y"__bX^^RyB48r>>|A%-*::: 5	6 	6 	6 21488'!5!5u!=!=Ii5d??tw"}}EH1D1D4i57b==EHNN4w%(""r   c                 4   t          |          t          |           k    rdS | |k    rdS | j        |j        k    r"| j        dS |j        dS | j        |j        k     S | j        |j        k    r"| j        dS |j        dS | j        |j        k     S |                                }|r"d | j        D             }|D ]}|j        |v r dS |j        dk    r|j        dk    s| j        dk    rS| j        dk    rH|j        dk    r'| j        dk    r| j        d         |j        d         k     S |j        dk    o
|j        dk    S d } ||           \  }} ||          \  }}	||k    r||k     S ||	k    r||	k     S | j        dk    s|j        dk    rdS | j        |j        k     S )NFTc                     g | ]	}|j         
S r-   r   r   s     r   r   z)PhysicalDevice.__lt__.<locals>.<listcomp>{  r   r   r   r   c                    | j         dk    sC| j                                                            | j                                                   r| j        }n| j         d| j        }t          j                            |          \  }}t          j                            |          t          j                            |          fS r   r   r   s       r   r   z3PhysicalDevice.__lt__.<locals>.split_make_and_model  r   r   )	rk   r
   r   rx   r	   rG   r&   r'   rj   r   s
             r   __lt__zPhysicalDevice.__lt__`  s   <<4;;&&55==5!444!)t"*u%(;;;%"666"*t#+u&)===  "" 	!004<000D ! !7d?? 55 # Y"__bX^^RyB48r>>|Aq)999 9?6uyB6	6 	6 	6 21488'!5!5u!=!=IiY&&iY&&7b==EHNN5w!!r   N)__name__
__module____qualname__r   r(   r/   r8   rP   r   rx   r~   r   r   r   r   r   r   r-   r   r   r   r      s        - - -C C C  
 
 
05 05 05db- b- b-H  ( ( (V% % %) ) )6 6 66 6 6
@# @# @#D?" ?" ?" ?" ?"r   r   __main__r   )configgettextinstallPACKAGEr   r#   urllib.parserA   r   r3   debugr   r   authconn
Connectionc
getDevicesr	   physicaldevicesvaluesr   physicaldeviceindexr[   r   rg   ro   rp   printr~   rx   r-   r   r   <module>r      s  *   v~1A B B B B                 A" A" A" A" A" A" A" A"F zOOOA$k$a((GO..## 4 4'00	4%%~66AA))62222 	4 	4 	4""N33333	4 )  n%%(())) ,,// 	 	FE#v	%  s   0CC! C!