PHP 7.4.33
Preview: version.py Size: 2.81 KB
/lib/python3/dist-packages/uaclient/version.py
"""
Client version related functions
"""
import os.path
import re
from math import inf
from typing import Optional

from uaclient.apt import (
    compare_versions,
    get_apt_cache_policy_for_package,
    get_apt_cache_time,
)
from uaclient.defaults import CANDIDATE_CACHE_PATH, UAC_RUN_PATH
from uaclient.exceptions import ProcessExecutionError
from uaclient.system import subp

__VERSION__ = "27.13.6"
PACKAGED_VERSION = "27.13.6~22.04.1"

CANDIDATE_REGEX = r"Candidate: (?P<candidate>.*?)\n"


def get_version() -> str:
    """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
    """
    if not PACKAGED_VERSION.startswith("@@PACKAGED_VERSION"):
        return PACKAGED_VERSION
    topdir = os.path.dirname(os.path.dirname(__file__))
    if os.path.exists(os.path.join(topdir, ".git")):
        cmd = ["git", "describe", "--abbrev=8", "--match=[0-9]*", "--long"]
        try:
            out, _ = subp(cmd)
            return out.strip()
        except ProcessExecutionError:
            pass
    return __VERSION__


def get_last_known_candidate() -> Optional[str]:
    # If we can't determine when the cache was updated for the last time,
    # We always assume it was as recent as possible - thus `inf`.
    last_apt_cache_update = get_apt_cache_time() or inf
    if (
        not os.path.exists(CANDIDATE_CACHE_PATH)
        or os.stat(CANDIDATE_CACHE_PATH).st_mtime < last_apt_cache_update
    ):
        candidate_version = None
        try:
            policy = get_apt_cache_policy_for_package("ubuntu-advantage-tools")
            match = re.search(CANDIDATE_REGEX, policy)
            if match:
                candidate_version = match.group("candidate")
                os.makedirs(UAC_RUN_PATH, exist_ok=True)
                with open(CANDIDATE_CACHE_PATH, "w") as f:
                    f.write(candidate_version)
                return candidate_version
        except Exception:
            if candidate_version is not None:
                return candidate_version

    try:
        with open(CANDIDATE_CACHE_PATH, "r") as f:
            return f.read().strip()
    except Exception:
        pass

    return None


def check_for_new_version() -> Optional[str]:
    candidate = get_last_known_candidate()
    if candidate and compare_versions(candidate, get_version(), "gt"):
        return candidate
    return None

Directory Contents

Dirs: 7 × Files: 25
Name Size Perms Modified Actions
api DIR
- drwxr-xr-x 2023-03-05 04:21:51
Edit Download
clouds DIR
- drwxr-xr-x 2023-03-05 04:21:51
Edit Download
daemon DIR
- drwxr-xr-x 2023-03-05 04:21:51
Edit Download
- drwxr-xr-x 2023-03-05 04:21:51
Edit Download
files DIR
- drwxr-xr-x 2023-03-05 04:21:49
Edit Download
jobs DIR
- drwxr-xr-x 2023-03-05 04:21:51
Edit Download
- drwxr-xr-x 2023-03-05 04:21:51
Edit Download
8.30 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
21.53 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
6.33 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
64.82 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
24.46 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
27.46 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
9.35 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
9.09 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
2.15 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
7.62 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
13.34 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
813 B lrw-r--r-- 2023-02-28 19:17:51
Edit Download
3.52 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
34.07 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
756 B lrw-r--r-- 2023-02-28 19:17:51
Edit Download
45.88 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
25.56 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
6.23 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
4.06 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
24.13 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
16.80 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
308 B lrw-r--r-- 2023-02-28 19:17:51
Edit Download
20.21 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
2.81 KB lrw-r--r-- 2023-02-28 19:17:51
Edit Download
0 B lrw-r--r-- 2023-02-28 19:17:51
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).