o
    f
                     @   s   d Z ddlZddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ d	Zd
ZdefddZdee fddZdee fddZdS )z"
Client version related functions
    N)inf)Optional)get_apt_cache_timeget_pkg_candidate_versionversion_compare)CANDIDATE_CACHE_PATHUAC_RUN_PATH)ProcessExecutionError)subp34z34~22.04returnc                  C   sp   t dst S tjtjt} tjtj| dr6g d}zt|\}}|	 W S  t
y5   Y tS w tS )aO  Return the packaged version as a string

    Prefer the binary PACKAGED_VESION set by debian/rules to DEB_VERSION.
    If unavailable, check for a .git development environments:
      a. If run in our upstream repo `git describe` will gives a leading
         XX.Y so return the --long version to allow daily build recipes
         to count commit offset from upstream's XX.Y signed tag.
      b. If run in a git-ubuntu pkg repo, upstream tags aren't visible,
         believe __VERSION__ is correct - there is and MUST always be a
         test to make sure it matches debian/changelog
    z@@PACKAGED_VERSIONz.git)gitdescribez
--abbrev=8z--match=[0-9]*z--long)PACKAGED_VERSION
startswithospathdirname__file__existsjoinr
   stripr	   __VERSION__)topdircmdout_ r   2/usr/lib/python3/dist-packages/uaclient/version.pyget_version   s   

r   c                  C   s   t  pt} tjtrttj| k rUd }z.td}|rBtj	t
dd ttd}|| W d    |W S 1 s:w   Y  |W S W n tyT   |d urR| Y S Y nw zttd}|  W  d    W S 1 smw   Y  W d S  ty~   Y d S w )Nzubuntu-pro-clientT)exist_okwr)r   r   r   r   r   r   statst_mtimer   makedirsr   openwrite	Exceptionreadr   )last_apt_cache_updatecandidate_versionfr   r   r   get_last_known_candidate/   s<   



$r-   c                  C   s"   t  } | rt| t dkr| S d S )Nr   )r-   r   r   )	candidater   r   r   check_for_new_versionL   s   r/   )__doc__os.pathr   mathr   typingr   uaclient.aptr   r   r   uaclient.defaultsr   r   uaclient.exceptionsr	   uaclient.systemr
   r   r   strr   r-   r/   r   r   r   r   <module>   s    