U
    2d6                     @   s   d Z ddl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ZedddZee dddZee dddZdS )z"
Client version related functions
    N)inf)Optional)compare_versions get_apt_cache_policy_for_packageget_apt_cache_time)CANDIDATE_CACHE_PATHUAC_RUN_PATH)ProcessExecutionError)subpz29.4z
29.4~20.04zCandidate: (?P<candidate>.*?)\n)returnc                  C   sv   t dst S tjtjt} tjtj| drrdddddg}zt|\}}|	 W S  t
k
rp   Y nX 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.gitZgitZdescribez
--abbrev=8z--match=[0-9]*z--long)PACKAGED_VERSION
startswithospathdirname__file__existsjoinr
   stripr	   __VERSION__)Z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 rd }zZtd}t	
t|}|r|d}tjtdd ttd}|| W 5 Q R X |W S W n$ tk
r   |d k	r| Y S Y nX z0ttd}|  W  5 Q R  W S Q R X W n tk
r   Y nX d S )Nzubuntu-advantage-tools	candidateT)exist_okwr)r   r   r   r   r   r   statst_mtimer   researchCANDIDATE_REGEXgroupmakedirsr   openwrite	Exceptionreadr   )Zlast_apt_cache_updateZcandidate_versionZpolicymatchfr   r   r   get_last_known_candidate1   s0    



$r-   c                  C   s    t  } | rt| t dr| S d S )Ngt)r-   r   r   )r   r   r   r   check_for_new_versionP   s    r/   )__doc__os.pathr   r"   Zmathr   typingr   Zuaclient.aptr   r   r   Zuaclient.defaultsr   r   Zuaclient.exceptionsr	   Zuaclient.systemr
   r   r   r$   strr   r-   r/   r   r   r   r   <module>   s   