
    ehf                     "   d dl Zd dlmZ d dlZd dlmZ d dlZ ej                  dd        ej                  dd       d dlm	Z	m
Z
mZmZ d dlZd dlZd dlZd dlZ ej"                  e      Zd dlZd	Zd
 Zd Zd Zd Zd Zd ZddZddZd Zy)    N)datetimewrapsGtkz3.0Handy1)Gior   GLibr   z%/var/lib/ubuntu-advantage/status.jsonc                    t        j                         | _        | j                  j                  |       | j                  j	                  |       | j                  j                  |        | j                  j                         D ]j  }t        t        |      t         j                        r-t         j                  j                  |      }t        | ||       St        j                  d|z         l y )Nz can not get name for object '%s')r   Builderbuilderset_translation_domainadd_from_fileconnect_signalsget_objects
issubclasstype	Buildableget_namesetattrloggingdebug)selfpathdomainonames        >/usr/lib/python3/dist-packages/softwareproperties/gtk/utils.pysetup_uir   &   s    ;;=DLLL''/LLt$LL  &\\%%' Bd1gs}}-==))!,DD$"MM<q@AB    c                  j    	 t         j                  j                  d      } | d k7  S # t        $ r Y yw xY w)Nz#gnome-online-accounts-panel.desktopF)r	   DesktopAppInfonew	Exception)ds    r   has_gnome_online_accountsr&   3   s:    ""#HIDy s   #& 	22c                      t         j                  j                         } t        j                         }|j                  | j                        S N)
aptsourcesdistro
get_distrodistro_infoUbuntuDistroInfois_ltscodenamer*   dis     r   is_current_distro_ltsr2   :   s7    ))+F		%	%	'B99V__%%r    c                      t         j                  j                         } t        j                         }| j
                  |j                  t        j                         j                               v S r(   )
r)   r*   r+   r,   r-   r/   	supportedr   nowdater0   s     r   is_current_distro_supportedr7   ?   sK    ))+F		%	%	'B??bll8<<>+>+>+@AAAr    c                      t         j                  j                         } t        j                         }|j                  d      }|D ]  }|j                  | j                  k(  s|c S  y )Nobject)result)r)   r*   r+   r,   r-   get_allseriesr/   )r*   r1   releasesreleases       r   current_distror?   D   sX    ))+F		%	%	'Bzzz*H >>V__,Nr    c                     d} t         j                  j                  t              r)t	        t              5 }|j                         } ddd       n]	 t        j                  g dt        j                        }|j                  dk7  rt        d|j                  z         i S |j                  } | st        d       i S 	 t        j                  |       }|j!                  d
d      dk7  rt        d|d
   z         |S # 1 sw Y   VxY w# t        $ r}t        d|z         i cY d}~S d}~ww xY w# t        j                  $ r}t        d	|z         i cY d}~S d}~ww xY w)zBReturn a dict of all UA status information or empty dict on error. N)prostatusz--format=json)stdoutzFailed to run `pro status`:
%sr   z"Ubuntu Pro client returned code %dzKWarning: no Ubuntu Pro Client status found. Is ubuntu-pro-client installed?z0Failed to parse ubuntu advantage client JSON:
%s_schema_versionz0.1z$Pro status schema version change: %s)osr   existsUA_STATUS_JSONopenread
subprocessrunPIPEr$   print
returncoderD   jsonloadsJSONDecodeErrorget)status_jsonstreamr:   erC   s        r   get_ua_statusrW   M   sF    K	ww~~n%.! 	(V ++-K	( 	(	^^2:??F !4v7H7HH Imm/	
 	K( zz#U+u42V<M5NN	
 MA	( 	(  	3a78I	"  AAEF	sG   C9'D <D+ 9D	D(D#D(#D(+E>EEEc                     |s
t               }d}d}|j                  dg       D ]6  }|j                  d      | k7  rd|v rt        d|d   k(        }d|v s2|d   }8 ||fS )ak  Get service availability and status for a specific UA service.

    Return a tuple (available, service_status).
      :boolean available: set True when either:
        - attached contract is entitled to the service
        - unattached machine reports service "availability" as "yes"
      :str service_status: will be one of the following:
        - "disabled" when the service is available and applicable but not
          active
        - "enabled" when the service is available and active
        - "n/a" when the service is not applicable to the environment or not
          entitled for the attached contract
    Fzn/aservicesr   	availableyesrC   )rW   rS   bool)service_namerC   rZ   service_statusservices        r   get_ua_service_statusr`   z   s     IN::j"- /;;v,.'!Ugk&::;Iw$X.N/ ~&&r    c                       fd}|S )a  
    Retry calling the decorated function using an exponential backoff.

    Args:
        exceptions: The exception to check. may be a tuple of
            exceptions to check.
        tries: Number of times to try (not retry) before giving up.
        delay: Initial delay between retries in seconds.
        backoff: Backoff multiplier (e.g. value of 2 will double the delay
            each retry).
    c                 8     t                fd       }|S )Nc                      
}}|dkD  r		  	| i |S  	| i |S # $ rP}dj                  ||      }t        j                  |       t        j                  |       |dz  }|z  }Y d }~nd }~ww xY w|dkD  rog)N   z{}, Retrying in {} seconds...)formatr   warningtimesleep)argskwargsmtriesmdelayrV   msgbackoffdelay
exceptionsftriess         r   f_retryz*retry.<locals>.deco_retry.<locals>.f_retry   s    "EFF1*&d-f-- d%f%% " &9@@FKCOOC(JJv&aKFg%F& 1*s    A1AA,,A1r   )rq   rs   rn   ro   rp   rr   s   ` r   
deco_retryzretry.<locals>.deco_retry   s     	q	& 
	& r     )rp   rr   ro   rn   rt   s   ```` r   retryrv      s    $ r    c                     t        j                  d      }|d k7  rt        j                  |d      S t        j                  j                         j                         S )N	GTK_THEMEdark)r
   getenvstr_has_suffixr   StyleManagerget_defaultget_dark)widgetenv_gtk_themes     r   is_dark_themer      sI    KK,M""=&99))+4466r    )z	esm-infraN)
   g?   )aptsources.distror)   r   r,   	functoolsr   girequire_versiongi.repositoryr	   r   r
   r   rP   rF   rK   r   	getLogger__name__LOGrg   rH   r   r&   r2   r7   r?   rW   r`   rv   r   ru   r    r   <module>r      s   &     	   5%     7C   / /  	  Gh 8B&
B
*Z':@7r    