
    -.f                     j    d dl m Z  d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	d dl
Z	 G d d      Zd Zy)    )globNc                   R    e Zd ZddZd Zd Zd Zd ZddZd Z	d Z
d	 Zd
 Zd Zy)QuirkCheckerc                     || _         || _        g | _        | j                          | j	                         | _        d| _        y )Nz/usr/share/X11/xorg.conf.d)_handlerquirks_path_quirksget_quirks_from_pathget_system_info_system_info_xorg_conf_d_path)selfhandlerpaths      5/usr/lib/python3/dist-packages/Quirks/quirkapplier.py__init__zQuirkChecker.__init__!   s=    !!# 002!=    c                    g | _         t        j                  j                  | j                        rt        t        j                  j                  | j                  d            D ]`  }t        j                  j                  |      s#t        j                  d|z         | j                  |      }| xj                   |z  c_         b | j                   S t        j                  d| j                  z         | j                   S )5check all the files in a directory looking for quirks*z
Parsing %sz%s does not exist)r	   osr   isdirr   r   joinisfileloggingdebugget_quirks_from_file)r   fquirkss      r   r
   z!QuirkChecker.get_quirks_from_path)   s    77==))*"'',,t'7'7=> +77>>!$MM,"23!66q9FLLF*L	+ || MM-0@0@@A||r   c                 `    t         j                  j                  |      }|j                         S )r   )Quirksquirkreader	ReadQuirk
get_quirks)r   
quirk_files     r   r   z!QuirkChecker.get_quirks_from_file7   s)     ''11*=
$$&&r   c                 ^    t         j                  j                         }|j                         S )zGet system info for the quirk)r!   	quirkinfo	QuirkInfoget_dmi_info)r   
quirk_infos     r   r   zQuirkChecker.get_system_info=   s%    %%//1
&&((r   c                    d}|j                   j                         D ]  }|j                   |   D ]  }| j                  j                  |      s| j                  j                  |      |k7  s>t	        |j                   |         dk  sZt        j                  d| j                  j                  |      d|         y  t        j                  d       |S )zSee if tags match system infoT   zFailure to match z with FSuccess)
match_tagskeysr   getlenr   r   )r   quirkresulttagvals        r   matches_tagszQuirkChecker.matches_tagsB   s    ##((* 	!C'', !%%))#.43D3D3H3H3MQT3T((-.!3MM#'#4#4#8#8#=s#D E !	! 	i r   c                 :   | j                   D ]  }| j                  j                         |j                  D cg c]   }|j                         j	                         " c}v sUt        j                  d|j                  z         | j                  |      rj|r4t        j                  d|j                  z         | j                  |       t        j                  d|j                  z         | j                  |       t        j                  d       	 yc c}w )z)Process quirks and do something with themzProcessing quirk %szApplying quirk %szUnapplying quirk %szQuirk doesn't matchN)r	   r   lowerr   stripr   r   idr6   info_apply_quirk_unapply_quirk)r   enabler2   xs       r   _check_quirkszQuirkChecker._check_quirksO   s    \\ 	:E}}""$EMM(Rq):(RR3ehh>?$$U+%8588%CD))%0%:UXX%EF++E2MM"89	:(Rs   %Dc                 &    | j                  d       y)zEnable all quirks for a handlerTNr@   r   s    r   enable_quirkszQuirkChecker.enable_quirks_   s    4 r   c                 &    | j                  d       y)z Disable all quirks for a handlerFNrB   rC   s    r   disable_quirkszQuirkChecker.disable_quirksc   s    5!r   c                     | j                   d| j                  d|j                  j                         j	                  dd      dS )z$Return the path to the X config filez/10-- z.conf)r   r   r:   r8   replace)r   r2   s     r   _get_destination_pathz"QuirkChecker._get_destination_pathg   s8    %)%;%;uxx~~/77SAC 	Cr   c                    | j                  |      }t        j                  dd      }|j                  |j                         |j                          t        j                  j                  |j                        }t        j                  |j                         t        j                  |j                         	 t        j                  d|z         |j                  |       y# t        $ r t        j                   d       Y yw xY w)z!Get the xorg snippet and apply itwF)modedeletezCreating %szError during write()T)rK   tempfileNamedTemporaryFilewrite	x_snippetclosexkit
xorgparserParsernamer   r   
globaldictr   unlinkIOError	exception)r   r2   destinationtmp_filetmp_xkits        r   r<   zQuirkChecker._apply_quirkl   s     007..CFu'??))(--8h))*
		(-- 	MM-+56NN;'   	45	s   <)C& &DDc                     | j                  |      }t        j                  d|z         	 t        j                  |       y# t
        t        f$ r t        j                  d       Y yw xY w)z%Remove the file with the xorg snippetzRemoving %s ...zCannot unlink destinationFT)rK   r   r   r   rZ   OSErrorr[   r\   )r   r2   r]   s      r   r=   zQuirkChecker._unapply_quirk   sd     007'+56	IIk"  ! 	9:	s   A $A('A(N)z/usr/share/jockey/quirks)T)__name__
__module____qualname__r   r
   r   r   r6   r@   rD   rF   rK   r<   r=    r   r   r   r       s:    >')
: !"C
(r   r   c                      t        dd      } | j                          | j                          t        t        j
                  j                  t                     y)Nnvidiaz/home/alberto/oem/jockey/quirks)r   r   )r   rD   rF   printr   r   abspath__file__)as    r   mainrl      s?    X$EFAOO	"''//8
%&$ r   )r   r   sysrP   r   xkit.xutilsrU   xkit.xorgparserQuirks.quirkreaderr!   Quirks.quirkinfor   rl   re   r   r   <module>rr      s4   (  	 
      k k\r   