ó
GdYc           @   sò   d  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
 m 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 „  Z d „  Z d S(   s=   
Get the spreadsheet containing the file system conventions.
iÿÿÿÿNi   (   t
   exceptionst+   google_drive_oauth2_v3_service_account_jsont   filet   drivet   v3s.   https://www.googleapis.com/auth/drive.readonlys'   application/vnd.google-apps.spreadsheets   text/csvc         C   sý   y t  j j j |  t ƒ SWnÜ t k
 rž } | j t j k rY t j	 d j
 |  ƒ ƒ ‚ qù | j t j k s} | j t j k r˜ t j d j
 |  ƒ ƒ ‚ qù ‚  n[ t k
 rË } t j d j
 |  ƒ d ƒ ‚ n. t k
 rø } t j d j
 |  | ƒ ƒ ‚ n Xd  S(   Ns5   The JSON Google credentials file "{0}" was not found.s<   The JSON Google credentials file "{0}" could not be accesseds>   File "{0}" does not contain Google service account credentialss5   Only Google Service Account credentials are supporteds#   File "{0}" is missing the key ({1})(   t   oauth2clientt   service_accountt   ServiceAccountCredentialst   from_json_keyfile_namet   SCOPESt   IOErrort   errnot   ENOENTt   ext   NoGoogleCredentialsFileErrort   formatt   EACCESt   EPERMt   InsufficientPermissionsErrort
   ValueErrort   NotAServiceAccountErrort   KeyErrort   InvalidGoogleCredentialsError(   t	   json_filet   err(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   google_credentials7   s*    $c         C   sF   y |  j  t j ƒ  ƒ SWn( t j j k
 rA } t j | ƒ ‚ n Xd  S(   N(   t	   authorizet   httplib2t   HttpR   t   clientt   ErrorR   t   GoogleAuthorizationError(   t   credsR   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   authorize_connectionP   s    c         C   s^   y# t  j j t t d | |  ƒ ƒSWn4 t  j j t j j f k
 rY } t	 j
 | ƒ ‚ n Xd  S(   Nt   http(   t   googleapiclientt	   discoveryt   buildt	   DRIVE_APIt   DRIVE_VERSIONt   errorsR   R   R   R   t   GoogleDriveConnectionError(   R    R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   build_driveW   s
    	!c         C   s¹   yD |  j  ƒ  j d d j | t ƒ d d d d ƒ j ƒ  j d g  ƒ SWnn t j j t	 j
 j f k
 r´ } t | t j j ƒ r¢ | j d d	 k r¢ t j | ƒ ‚ qµ t j | ƒ ‚ n Xd  S(
   Nt   qs-   name='{}' and mimeType='{}' and trashed=falset   orderBys   modifiedTime desct   fieldssH   files(id,name,version,description,modifiedTime,lastModifyingUser,owners)t   filest   statust   400(   R.   t   listR   t   SRC_MIMETYPEt   executet   getR#   R(   R   R   R   t
   isinstancet	   HttpErrort   respR   t   InvalidGoogleListCallErrort   GoogleListError(   R   t   nameR   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   get_drive_file_info_   s    !c         C   s—   y( |  j  ƒ  j d | d t ƒ j ƒ  } Wn4 t j j t j j f k
 r^ } t	 j
 | ƒ ‚ n X| ru | j d d ƒ St	 j d j | | ƒ d ƒ ‚ d  S(   Nt   fileIdt   mimeTypet   asciit   ignores*   Google id ({0}) discovered from name ({1})s#   An empty sheet can cause this error(   R.   t   exportt   DST_MIMETYPER3   R#   R(   R   R   R   R   t   GoogleDownloadErrort   decodet   NoSheetDownloadedErrorR   (   R   t   idR:   t   dataR   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   download_sheets   s    !c         C   s
   t  |  f S(   N(   t   GOOGLE_SOURCE(   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   google_metainfoƒ   s    c         C   s®   t  |  ƒ } y" t | | ƒ } t | | ƒ } Wn% t j k
 rU } t j | ƒ ‚ n X| r | d } t | ƒ t | | d | ƒ j t	 ƒ f St j
 d j | ƒ d ƒ ‚ d  S(   Ni    RE   s1   Attempted to download the spreadsheet named ({0})sR   Perhaps the name is wrong or the credentials do not have the necessary permissions(   R   R*   R;   R   t   HttpLib2ErrorR   RI   RG   t
   splitlinest   Truet   NoSuchSpreadsheetErrorR   (   t
   json_credsR   R:   R    t   google_driveR.   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   rules_from_google‡   s    
	
c         C   s0   t  i t j j |  ƒ d 6t j j |  ƒ d 6f S(   Nt   patht   mtime(   t   FILE_SOURCEt   osRQ   t   abspatht   getmtime(   RQ   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   file_metainfoœ   s    c         C   sÄ   y t  |  ƒ } Wn‚ t k
 r” } | j t j k rO t j d j |  ƒ ƒ ‚ q• | j t j k ss | j t j k rŽ t j	 d j |  ƒ ƒ ‚ q• ‚  n Xt
 |  ƒ } |  t | ƒ } Wd  QX| | f S(   Ns,   The rule convention file "{0}" was not founds4   The rule convention file "{0}" could not be accessed(   t   openR
   R   R   R   t   NoRulesFileErrorR   R   R   R   RW   R1   (   RQ   t	   rule_fileR   t   metainfot   content(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   rules_from_file¡   s     $c         C   s:   |  d t  k r t |  d ƒ St |  d t |  d ƒ Sd  S(   Nt   rules_sourcet
   rules_pathR   t   spreadsheet_name(   RS   R]   RP   R!   (   t   config(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   get_rule_file·   s    (   s.   https://www.googleapis.com/auth/drive.readonly(   t   __doc__R   RT   t   googleapiclient.discoveryR#   t   googleapiclient.errorsR   t   oauth2client.clientR   t   oauth2client.service_accountt    R    R   RH   RS   R&   R'   R	   R2   RA   R   R!   R*   R;   RG   RI   RP   RW   R]   Rb   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/get_rules.pyt   <module>   s2   									