| Server IP : 54.233.248.239 / Your IP : 172.28.20.13 Web Server : Apache System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /lib/python3/dist-packages/uaclient/api/u/pro/packages/updates/ |
Upload File : |
from typing import List
from uaclient.api.api import APIEndpoint
from uaclient.api.data_types import AdditionalInfo
from uaclient.config import UAConfig
from uaclient.data_types import (
DataObject,
Field,
IntDataValue,
StringDataValue,
data_list,
)
from uaclient.security_status import (
create_updates_list,
filter_updates,
get_installed_packages_by_origin,
get_ua_info,
)
class UpdateSummary(DataObject):
fields = [
Field("num_updates", IntDataValue),
Field("num_esm_apps_updates", IntDataValue),
Field("num_esm_infra_updates", IntDataValue),
Field("num_standard_security_updates", IntDataValue),
Field("num_standard_updates", IntDataValue),
]
def __init__(
self,
num_updates: int,
num_esm_apps_updates: int,
num_esm_infra_updates: int,
num_standard_security_updates: int,
num_standard_updates: int,
):
self.num_updates = num_updates
self.num_esm_apps_updates = num_esm_apps_updates
self.num_esm_infra_updates = num_esm_infra_updates
self.num_standard_security_updates = num_standard_security_updates
self.num_standard_updates = num_standard_updates
class UpdateInfo(DataObject):
fields = [
Field("download_size", IntDataValue),
Field("origin", StringDataValue),
Field("package", StringDataValue),
Field("provided_by", StringDataValue),
Field("status", StringDataValue),
Field("version", StringDataValue),
]
def __init__(
self,
download_size: int,
origin: str,
package: str,
provided_by: str,
status: str,
version: str,
):
self.download_size = download_size
self.origin = origin
self.package = package
self.provided_by = provided_by
self.status = status
self.version = version
class PackageUpdatesResult(DataObject, AdditionalInfo):
fields = [
Field("summary", UpdateSummary),
Field("updates", data_list(UpdateInfo)),
]
def __init__(self, summary: UpdateSummary, updates: List[UpdateInfo]):
self.summary = summary
self.updates = updates
def updates() -> PackageUpdatesResult:
return _updates(UAConfig())
def _updates(cfg: UAConfig) -> PackageUpdatesResult:
ua_info = get_ua_info(cfg)
packages = get_installed_packages_by_origin()
upgradable_versions = filter_updates(packages["all"])
update_list = create_updates_list(upgradable_versions, ua_info)
num_esm_apps_updates = len(upgradable_versions["esm-apps"])
num_esm_infra_updates = len(upgradable_versions["esm-infra"])
num_standard_security_updates = len(
upgradable_versions["standard-security"]
)
num_standard_updates = len(upgradable_versions["standard-updates"])
summary = UpdateSummary(
num_updates=num_esm_apps_updates
+ num_esm_infra_updates
+ num_standard_security_updates
+ num_standard_updates,
num_esm_apps_updates=num_esm_apps_updates,
num_esm_infra_updates=num_esm_infra_updates,
num_standard_security_updates=num_standard_security_updates,
num_standard_updates=num_standard_updates,
)
updates = [
UpdateInfo(
download_size=update["download_size"],
origin=update["origin"],
package=update["package"],
provided_by=update["service_name"],
status=update["status"],
version=update["version"],
)
for update in update_list
]
return PackageUpdatesResult(summary=summary, updates=updates)
endpoint = APIEndpoint(
version="v1",
name="PackageUpdates",
fn=_updates,
options_cls=None,
)