HEX
Server: Apache
System: Linux a16-asgard6.hospedagemuolhost.com.br 5.14.0-570.52.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Oct 15 06:39:08 EDT 2025 x86_64
User: maoristu4c3dbd03 (1436)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //lib64/python3.9/site-packages/subscription_manager/overrides.py
# Copyright (c) 2013 Red Hat, Inc.
#
#
# This software is licensed to you under the GNU General Public License,
# version 2 (GPLv2). There is NO WARRANTY for this software, express or
# implied, including the implied warranties of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
# along with this software; if not, see
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
#
# Red Hat trademarks are not licensed under GPLv2. No permission is
# granted to use or replicate Red Hat trademarks that are incorporated
# in this software or its documentation.

from typing import Dict, List, Optional, TYPE_CHECKING

from subscription_manager import injection as inj
from subscription_manager.repolib import RepoActionInvoker

import logging

if TYPE_CHECKING:
    from rhsm.connection import UEPConnection
    from subscription_manager.cache import OverrideStatusCache
    from subscription_manager.cp_provider import CPProvider

log = logging.getLogger(__name__)

# Module for manipulating content overrides


class Overrides:
    def __init__(self):
        self.cp_provider: CPProvider = inj.require(inj.CP_PROVIDER)

        self.cache: OverrideStatusCache = inj.require(inj.OVERRIDE_STATUS_CACHE)
        self.repo_lib = RepoActionInvoker(cache_only=True)

    def get_overrides(self, consumer_uuid: str) -> List["Override"]:
        return self._build_from_json(self.cache.load_status(self._getuep(), consumer_uuid))

    def add_overrides(self, consumer_uuid, overrides) -> List["Override"]:
        return self._build_from_json(self._getuep().setContentOverrides(consumer_uuid, self._add(overrides)))

    def remove_overrides(self, consumer_uuid, overrides) -> List["Override"]:
        return self._delete_overrides(consumer_uuid, self._remove(overrides))

    def remove_all_overrides(self, consumer_uuid, repos) -> List["Override"]:
        return self._delete_overrides(consumer_uuid, self._remove_all(repos))

    def update(self, overrides: List["Override"]) -> None:
        self.cache.server_status = [override.to_json() for override in overrides]
        self.cache.write_cache()
        self.repo_lib.update()

    def _delete_overrides(self, consumer_uuid: str, override_data: List[dict]):
        return self._build_from_json(self._getuep().deleteContentOverrides(consumer_uuid, override_data))

    def _add(self, overrides: List) -> List[dict]:
        return [override.to_json() for override in overrides]

    def _remove(self, overrides: List) -> List[dict]:
        return [{"contentLabel": override.repo_id, "name": override.name} for override in overrides]

    def _remove_all(self, repos: List[dict]) -> Optional[List[dict]]:
        if repos:
            return [{"contentLabel": repo} for repo in repos]
        else:
            return None

    def _build_from_json(self, override_json: List[dict]) -> List["Override"]:
        return [Override.from_json(override_dict) for override_dict in override_json]

    def _getuep(self) -> "UEPConnection":
        return self.cp_provider.get_consumer_auth_cp()


class Override:
    def __init__(self, repo_id: str, name: str, value: Optional[object] = None):
        self.repo_id: str = repo_id
        self.name: str = name
        self.value: Optional[object] = value

    @classmethod
    def from_json(cls, json_obj: Dict[str, str]):
        return cls(json_obj["contentLabel"], json_obj["name"], json_obj["value"])

    def to_json(self) -> Dict[str, str]:
        return {"contentLabel": self.repo_id, "name": self.name, "value": self.value}