Server IP : 15.235.198.142 / Your IP : 216.73.216.155 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ballsack 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/uaclient/api/u/pro/status/is_attached/ |
Upload File : |
import enum from typing import Optional, Tuple from uaclient.api.api import APIEndpoint from uaclient.api.data_types import AdditionalInfo from uaclient.config import UAConfig from uaclient.data_types import ( BoolDataValue, DataObject, Field, IntDataValue, StringDataValue, ) from uaclient.defaults import ( CONTRACT_EXPIRY_GRACE_PERIOD_DAYS, CONTRACT_EXPIRY_PENDING_DAYS, ) class IsAttachedResult(DataObject, AdditionalInfo): fields = [ Field("is_attached", BoolDataValue), Field("contract_status", StringDataValue, False), Field("contract_remaining_days", IntDataValue), Field("is_attached_and_contract_valid", BoolDataValue), ] def __init__( self, *, is_attached: bool, contract_status: Optional[str], contract_remaining_days: int, is_attached_and_contract_valid: bool ): self.is_attached = is_attached self.contract_status = contract_status self.contract_remaining_days = contract_remaining_days self.is_attached_and_contract_valid = is_attached_and_contract_valid @enum.unique class ContractExpiryStatus(enum.Enum): NONE = None ACTIVE = "active" ACTIVE_EXPIRED_SOON = "active-soon-to-expire" EXPIRED_GRACE_PERIOD = "grace-period" EXPIRED = "expired" def _get_contract_expiry_status( cfg: UAConfig, is_machine_attached: bool, ) -> Tuple[ContractExpiryStatus, int]: """Return a tuple [ContractExpiryStatus, num_days]""" if not is_machine_attached: return ContractExpiryStatus.NONE, 0 grace_period = CONTRACT_EXPIRY_GRACE_PERIOD_DAYS pending_expiry = CONTRACT_EXPIRY_PENDING_DAYS remaining_days = cfg.machine_token_file.contract_remaining_days # if unknown assume the worst if remaining_days is None: return ContractExpiryStatus.EXPIRED, -grace_period if 0 <= remaining_days <= pending_expiry: return ContractExpiryStatus.ACTIVE_EXPIRED_SOON, remaining_days elif -grace_period <= remaining_days < 0: return ContractExpiryStatus.EXPIRED_GRACE_PERIOD, remaining_days elif remaining_days < -grace_period: return ContractExpiryStatus.EXPIRED, remaining_days return ContractExpiryStatus.ACTIVE, remaining_days def is_attached() -> IsAttachedResult: return _is_attached(UAConfig()) def _is_attached(cfg: UAConfig) -> IsAttachedResult: is_machine_attached = bool(cfg.machine_token) contract_status, remaining_days = _get_contract_expiry_status( cfg, is_machine_attached ) is_attached_and_contract_valid = True if ( not is_machine_attached or contract_status == ContractExpiryStatus.EXPIRED ): is_attached_and_contract_valid = False return IsAttachedResult( is_attached=is_machine_attached, contract_status=contract_status.value, contract_remaining_days=remaining_days, is_attached_and_contract_valid=is_attached_and_contract_valid, ) endpoint = APIEndpoint( version="v1", name="IsAttached", fn=_is_attached, options_cls=None, )