
    Hf@                     X   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
  G d d      Zedk(  rd dlZ ej                         Z ej                   e      Zg Zej'                         D ]0  Z ee      Z	 ej-                  e      Zee   j1                  e       2 ej7                          eD ]8  Z eej;                                ej=                         ZeD ]  Z ede        : yy# e$ r ej5                  e       Y w xY w)    N)domain	localedir)*c                   `    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y)PhysicalDevicec                     d | _         d | _        d | _        d| _        d | _        | j                  |       i | _        t        j                  | _	        y )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__   sH    !"  #,,    c                 Z   t        |d      ru|j                  j                  dd      }|j                  j                  dd      }|dk(  s-|j                         j	                  |j                               r|}n|d|}n|j
                  }t        j                  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&..$$eR0C..$$eR0CbyCIIL33SYY\B!$,/!5$33^11>BBr   c                 0    |y d|vrd|vr
|dk7  r|dz   S |S )N.:	localhostz.local )r   hostnames     r   _add_dot_local_if_neededz'PhysicalDevice._add_dot_local_if_needed7   s0    3(?$h&&Or   c                     	 t        j                  |dt         j                        d   d   d   }|S #  	 t        j                  |dt         j                        d   d   d   }Y |S #  d }Y Y |S xY wxY w)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G 	 ,,Xq4:OOEEFHHIKKLN s    /3 A3/A((A0,A30A3c                    d }d }d }t         j                  j                  |      \  }}|dk(  s|dk(  rd }|j                  d      r%t         j                  j	                  |dd        \  }}|F|j                  d      r|dd  }n`|j                  d      r|dd  }nI|j                  d	      r|dd  }n2y
y
|dk(  s|dk(  ry
t         j                  j                  |      \  }}|y
|r"t         j                  j                  |      \  }}|rd }		 | j                  |      }	|	r|	}n|r	 | j                  |      }| j                  |      | j                  |      fS #  Y &xY w#  d }Y /xY w)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T>Vw.G("(,,"9"948"Dw"%%e,&qr{H''5&qr{H''. 'I%!w&F"2 %||55t<Xt!!<<118<LT4B&&t,D ((3 ,,T2)))45 	5s   E &E  E E&c                 ,	   | j                   s| j                  r	| j                  |j                        \  }}t	        |d      r| j                  |j                        }t	        |d      r|| j                  |j                        }|||r| j                   r|| j                   k(  sW|r| j                  r|| j                  k(  s:|r| j                   r|| j                   k(  s|r8| j                  r,|| j                  k(  r|| j                  || j                   t        | j                  |      \  }}| j                  a|| _        || _        |j                         | _        |j                         | _        |j                   j#                  dd      | _        g | _
        nxd } || j                  |      | _         || j                  |      | _        |j                   j#                  dd      }|dk7  r$| j$                  dk7  r|| j$                  k7  rt        |j&                  dk(  r!|j                  j)                  dd      |_        |j                  j+                  d      r|j                  j-                  d	      d
k7  sQ|j                  j+                  d      s|j                  j+                  d      r#|j                  j/                  d      rd| _        n| j0                  ry | j                  D ]  }|j                  |j                  k(  s y  | j2                  s|j                  | _        | j                  j5                  |       | j                  j7                          | j                   r| j                  s;|j8                  dk(  r,| j                  |j                        \  | _         }|r|| _        t	        |d      r0| j                   $|j                  }	|	r| j                  |	      | _         t	        |d      r0| j                  $|j                  }
|
r| j                  |
      | _        | j                  r#| j                   	 | j;                  
      | _         t=        d|j                  dt?        |              y #  d | _         Y 0xY w)Nr7   r.   SNr   c                 2    d } ||       ||       k  r|S | S )Nc                 ~    | j                         }d}t        t        |             D ]  }||   | |   k7  s|dz  } |S )Nr      )r    rangelen)slnis       r   count_lowerz>PhysicalDevice.add_device.<locals>.nicest.<locals>.count_lower   sH    GGJ!&Q 'A tqt| !Q'  !r   r-   )abr\   s      r   nicestz)PhysicalDevice.add_device.<locals>.nicest   s#    ! #Aa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!4"55vzzBOD)+44V^^D,1B 99&//J	!2d00T///d11T0004#5#5$"4"444#6#6$"5"55!4!4!<!d&8&8&@  ++V4JS#||#!$!$ ..,,dB7!
 "488S1!488S1^^''r282"-$$;;("++Wb9FJJJ!!&)JJOOL)R/ZZ""8,ZZ""7+JJ(#D 	Auu

"	 }}"JJDMV$""$*=*=)+ ''4 *D	&/#VY'D,>,>,FnnG%)%B%B7%K"VZ(T-@-@-HH&*&C&CH&M#D$6$6$>*%)%6%6x%@" 	JJT
, 	-*%)"s   R 	Rc                     | j                   S N)r	   r   s    r   get_deviceszPhysicalDevice.get_devices   s    ||r   c                 (   | j                   d   j                  j                  d      r+| j                   d   j                  j                  d      dk7  sx| j                   d   j                  j                  d      s(| j                   d   j                  j                  d      r| j                   d   j                  j	                  d      r| j
                  sd| j                  z  }n| j                  r| j                  j                  d	      dk7  rd| j
                  z  }n| j                  | j
                  k7  r| j
                  d
| j                  d}nd| j                  z  }n| j                  dk(  s*| j                  dk(  rN| j                  j                  d      r3| j                  j                  | j                   d   j                        }n| j                  d| j                  }| j                  rt        | j                        dkD  s&| j
                  rGt        | j
                        dkD  r.| j                   d   j                  j                  d      s(| j                   d   j                  j                  d      r(| j                   d   j                  j	                  d      s| j                  r|j                  | j                        dk(  r| j
                  r|j                  | j
                        dk(  rb| j
                  s|d| j                  z  z  }|S | j                  s|d| j
                  z  z  }|S |d
| j
                  d| j                  dz  }|S t        | j                        dkD  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    LLO**62LLO$$\2b8\\!_  ++H5\\!_  ++G4LLO((1&&d000''4+=+=+B+B3+G2+Md111%%)<)<<(,(;(;T=O=OPD$"4"44DXX^HH!4!4U!;??&&Q(<(<=D"hh1DC););$<q$@  S$*=*=%>%Bll1o!!,,X6ll1o!!,,W5ll1o!!**73##YYt))*b0$$YYt**+r1&&$"4"444  ''$"5"555
  t':':D<N<NOO  $'']QGdgg%%Dr   c                 "    || j                   |<   y rv   )r   )r   keyvalues      r   set_datazPhysicalDevice.set_data  s    $r   c                 8    | j                   j                  |      S rv   )r   r   )r   r   s     r   get_datazPhysicalDevice.get_data  s    ""C((r   c                 (    d| j                         z  S )Nz(description: %s))__repr__rw   s    r   __str__zPhysicalDevice.__str__  s    "T]]%555r   c                     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__  s6    488TWWd.@.@$$dmm5 	6r   c                    t        |      t        |       k7  ry| j                  rt        | j                        dk(  rn|j                  rt        |j                        dk(  rJ| j                  rt        | j                        dk(  r&|j                  rt        |j                        dk(  s| j                  rVt        | j                        dkD  r>|j                  r2t        |j                        dkD  r| j                  |j                  k(  s$| j                  rUt        | j                        dkD  r=|j                  r1t        |j                        dkD  r| j                  |j                  k(  s| j                  rUt        | j                        dkD  r=|j                  r1t        |j                        dkD  r| j                  |j                  k(  sb| j                  rUt        | j                        dkD  r=|j                  r1t        |j                        dkD  r| j                  |j                  k(  sy|j	                         }|r:| j
                  D cg c]  }|j                   }}|D ]  }|j                  |v s y |j                  dk(  r|j                  dk(  s| j                  dk(  rM| j                  dk(  r>|j                  dk(  r.| j                  dk(  r| j
                  d   |j
                  d   k(  S yd } ||       \  }} ||      \  }	}
||	k7  ry|dk(  r)| j                  dk7  r| j                  |j                  k(  ry||
k7  ry| j                  dk(  s|j                  dk(  ry| j                  |j                  k(  S c c}w )NFr   Tr   c                    | j                   dk(  sA| j                  j                         j                  | j                   j                               r| j                  }n| j                   d| j                  }t        j
                  j                  |      \  }}t        j
                  j                  |      t        j
                  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      ww"} 0 ; ;SWW]]=M N!$,/GGSWW!=$));;^LJS#$$..4$$..46 6r   r:   )
rk   r
   rW   r   rx   r	   rG   r&   r'   rj   r   otherdevsxurisr   r   our_mfgour_mdl	other_mfg	other_mdls              r   __eq__zPhysicalDevice.__eq__  s   <4;&((C1C1C,D,I))S%2E2E-F!-K))S$2E2E-F!-K**u++,1##T-?-?(@1(D$$e.A.A)BQ)F##u':'::$$d.A.A)BQ)F%%#u/C/C*Dq*H$$(<(<<##T-?-?(@1(D%%#u/C/C*Dq*H##u';';;$$d.A.A)BQ)F$$e.A.A)BQ)F$$(;(;;  "#'<<0aAEE0D0  77d? 
 YY"_bXX^RyyB488r>||A%--*::: 	6 248'!5u!=Iid?tww"}EHH1Di77b=EHHNww%((""O 1s   Nc                    t        |      t        |       k7  ry| |k(  ry| j                  |j                  k7  r3| j                  y|j                  y| j                  |j                  k  S | j                  |j                  k7  r3| j                  y|j                  y| j                  |j                  k  S |j                         }|r:| j                  D cg c]  }|j
                   }}|D ]  }|j
                  |v s y |j                  dk(  r|j                  dk(  s| j                  dk(  rl| j                  dk(  r]|j                  dk(  r.| j                  dk(  r| j                  d   |j                  d   k  S |j                  dk(  xr |j                  dk(  S d } ||       \  }} ||      \  }	}
||	k7  r||	k  S ||
k7  r||
k  S | j                  dk(  s|j                  dk(  ry| j                  |j                  k  S c c}w )NFTr   r   c                    | j                   dk(  sA| j                  j                         j                  | j                   j                               r| j                  }n| j                   d| j                  }t        j
                  j                  |      \  }}t        j
                  j                  |      t        j
                  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=!4!44!!)""*%%(;(;;;%"6"66""*##+&&)=)===  "#'<<0aAEE0D0 !77d? !
 YY"_bXX^RyyB488r>||Aq)999 99?6uyyB6	6 248'!5u!=IiY&&iY&&77b=EHHNww!!I 1s   HN)__name__
__module____qualname__r   r(   r/   r8   rP   r   rx   r~   r   r   r   r   r   r   r-   r   r   r   r      sO    -C
05db-H(V%)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      s8  *   v~~1A1A B     A" A"F zA$k$$a(GO..# 4'0	4%%~6AA))62	4 ) n%%() ,,/ 	F#v	   	4""N3	4s   %DD)(D)