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: //usr/lib64/python3.9/site-packages/rhsmlib/services/__pycache__/entitlement.cpython-39.opt-1.pyc
a

X�ZhF_�@s�ddlZddlZddlZddlZddlmZmZddlmZ	ddl
mZddlm
Z
mZddlmZddlmZddlmZmZddlmZe�e�ZGd	d
�d
�ZdS)�N)�Union�Callable)�	injection)�ugettext)�
managerlib�utils)�EntCertActionInvoker)�certificate)�
exceptions�productsc@s<eZdZd*ejdd�dd�Zeeejd�dd��Z	d+ee
ed	�d
d�Zd,e
eefee
e
e
ee
ejeejeeeed
�dd�Zd-eee
ed�dd�Zed.e
eje
e
eeeejeee
ed�dd��Zedd�dd�Zeeeed�dd�Zed�dd�Zeed�d d!�Zeed"�d#d$�Zedd�d%d&��Zd/e
e
dd'�d(d)�ZdS)0�EntitlementServiceN)�cp�returncCs<||_t�tj�|_t�tj�|_t�tj�|_t	�|_
dS)N)r
�inj�require�IDENTITY�identityZPROD_DIRZproduct_dirZENT_DIR�entitlement_dirr�
entcertlib)�selfr
�r�B/usr/lib64/python3.9/site-packages/rhsmlib/services/entitlement.py�__init__!s
zEntitlementService.__init__)�on_datercCspztj�|d�}Wn6tyHt�dt���}ttd�j|d���Yn0|��tj�	���krlttd���|S)z�
        Return new datetime parsed from date
        :param on_date: String representing date
        :return It returns datetime.datetime structure representing date
        z%Y-%m-%dzNDate entered is invalid. Date should be in YYYY-MM-DD format (example: {date}))�datezPast dates are not allowed)
�datetime�strptime�
ValueError�time�strftime�	localtime�_�formatr�now)�clsrZ
local_daterrr�
parse_date(s��
zEntitlementService.parse_dateF)r�forcercCs�t�tj|�}|j|kr||_|durJt�d�t�tj�}d|_|��|�	�|j
��r�|��}|�
�}|j��}|j��}|��}	|||||	d�}
ntd�diidd�}
t�dt|
��|
S)NTz'Deleting cache entitlement status cache)�statusZ	status_id�reasons�
reason_ids�validZUnknown�unknownFzentitlement status: %s)rr�CERT_SORTERr�log�debug�ENTITLEMENT_STATUS_CACHE�
server_status�delete_cache�loadr�is_validZget_system_statusZget_system_status_idr(Zget_name_message_mapZget_reason_ids_mapr!�str)rrr&�sorter�status_cacheZoverall_statusZoverall_status_idr(r)r*r'rrr�
get_status<s:




�	�zEntitlementService.get_statusr)�pool_subsets�matches�	pool_only�match_installed�
no_overlap�
service_level�show_allr�future�
after_date�page�items_per_page�kwargsrc

Ks(|
rt�td�|
����t|t�r*|g}|s6gd�}|||||||||	|
d�
}|�|�i}d|vr�t�|j	�j
|dd�}dd�|D�|d<d	|vr�|j||dd
�}|r�dd�|D�|d	<ndd�|D�|d	<d
|v�r$|j|||||||	|
t
|�t
|�dd�}|�rdd�|D�|d
<n||d
<|S)NzUnknown arguments: %s��	installed�consumed�	available)
r8r9r:r;r<r=r>rr?r@rET)�	iso_datescSsg|]}|���qSr��_asdict��.0�xrrr�
<listcomp>��z0EntitlementService.get_pools.<locals>.<listcomp>rF)r=r9rHcSsg|]}|��d�qS)�pool_idrIrKrrrrN�rOcSsg|]}|���qSrrIrKrrrrN�rOrG)r>rr<r;r9r=r?r@rArBrHcSsg|]}|d�qS)�idrrKrrrrN�rO)r
�ValidationErrorr!�keys�
isinstancer4�validate_optionsrZInstalledProductsr
�list�get_consumed_product_pools�get_available_pools�int)rr8r9r:r;r<r=r>rr?r@rArBrC�options�resultsrErFrGrrr�	get_poolsis^
�
�
�
zEntitlementService.get_pools)r=r9rHrcCsLt�dgd��}t�dgd��}t�tj�}|j��}t�tj�}g}	|j�	�|j�
�}
tj||d�}|dusx|dur�t
t
|j|
��}
|r�tj}ntj}|
D�]�}
d}d}d}d}d}d}d}d}d}d}d}d}|
j}|�r�|jp�d}|jp�d}|
jjdk�r6|
jjd	k�r6|j�pd}|j�p&d}|j�p2d}nd}d}d}|j}|j}|j�pXd}|j�pdd}|j}|j �r~t!d
�}nt!d�}|j"�r�t!d�}nt!d�}t!d
�}t#|
j$d��r�|
j$j%}dd�|
j&D�}g}d}t�tj��'��r�|
j(�r$d|
j(v�r$|
j(d|v�r||
j(d}|�)|�}|�s�|
|j*v�rF|�+t!d��n:|
j,�-�t.j.�/t0�1��k�rr|�+t!d��n|�+t!d��n|�+t!d��|du�r�|du�r�|du�r�|	�+|||||||
j2|||
�3�|||||||
j,�4��||
j,�-��|��q�|	�+|||||||
j2|||
�3�||||||||||
j,�4��||
j,�-��|��q�|	S)N�OldConsumedStatus)�subscription_name�provides�sku�contract�account�serialrP�provides_management�active�
quantity_used�service_typer=�status_details�subscription_type�starts�ends�system_type�ConsumedStatus)r^r_r`rarbrcrPrdrerfrg�rolesr=�usage�addonsrhrirjrkrl)�
filter_stringr=�ZNo��ZVirtualZPhysicalZYesz
Not AvailablerQcSsi|]}|j|j�qSr)rQ�name)rL�prrr�
<dictcomp>.rOzAEntitlementService.get_consumed_product_pools.<locals>.<dictcomp>ZCNzSubscription is currentzSubscription is expiredzSubscription has not begunz?Subscription management service doesn't support Status Details.)5�collections�
namedtuplerrr,r(Zget_subscription_reasons_mapZPOOLTYPE_CACHEr�refreshrVrZEntitlementCertificateFilter�filter�matchrZformat_iso8601_dateZformat_date�orderrgr=�version�major�minorrnrorprur`rarbrfZ	virt_onlyr!rd�hasattrZpoolrQrZare_reasons_supportedZsubject�getZvalid_entitlement_certs�appendZvalid_range�endrr#r	ZGMTrcr3Zbegin)rr=r9rHr]rmr5Zcert_reasons_mapZpooltype_cacheZconsumed_statusesZcertsZcert_filterZdate_formatterZcertrur`rarbrfrgrnrorprlrdr}rPZprovided_productsr(Z	pool_typerrrrW�s���








����z-EntitlementService.get_consumed_product_pools)r>rr<r;r9r=r?r@rArBrHrcsP|durt|d�}d|	}nd}}	d}}|||||�||||d�
}
t�tj�}t�tj�}|�||
�}t|�dkr�tj||||||||||
d�
}|�	�}|j
|
|t��|d�i}||_|�
�ttd��fdd	�}�d
ur�tt||��}|	dk�rL||	|}|d|	|}|dk�r$|}|||�}|D]}||d<|	|d
<�q4|S)a`
        Get list of available pools
        :param show_all:
        :param on_date:
        :param no_overlap:
        :param match_installed:
        :param matches:
        :param service_level:
        :param future:
        :param after_date:
        :param page:
        :param items_per_page:
        :param iso_dates:
        :return:
        Trtr)
r>rr<r;r9r=r?r@rArB)
Zget_allZ	active_onZoverlappingZuninstalledrqr?r@rArBrH)�filter_optionsZpools�timeout)�	pool_datarcs$d}|dr|d}���|��kS)Nrrr=)�lower)r�Z
pool_level�r=rr�filter_pool_by_service_level�szLEntitlementService.get_available_pools.<locals>.filter_pool_by_service_levelN�rArB)rYrrrZAVAILABLE_ENTITLEMENT_CACHEZget_not_obsolete_data�lenrZget_available_entitlementsr��uuidrZavailable_entitlementsZwrite_cache�dict�boolrVr{)r>rr<r;r9r=r?r@rArBrHZ_pageZ_items_per_pager�r�cacheZavailable_poolsr��datar�Zlo_idxZhi_idx�itemrr�rrXxsl 
��

��

z&EntitlementService.get_available_pools)rZrcCsDtgd���|d�s$t�td���|drHd|dvrHt�td���n�|drld|dvrlt�td���n�|d	dur�td
dg��|d�s�t�td���n�|dr�d|dvr�t�td
���n~|dr�d|dvr�t�td���nZ|d�rtd
dg��|d��st�td���n(|j���s@d|dv�r@t�td���dS)NrDr8z_Error: invalid listing type provided.  Only "installed", "consumed", or "available" are allowedr>rGz0Error: --all is only applicable with --availablerz3Error: --ondate is only applicable with --availabler=rFzGError: --servicelevel is only applicable with --available or --consumedr;z<Error: --match-installed is only applicable with --availabler<z7Error: --no-overlap is only applicable with --availabler:zHError: --pool-only is only applicable with --available and/or --consumedz$Error: this system is not registered)�set�
issupersetr
rRr!�intersectionrr3)rrZrrrrU�s<�������z#EntitlementService.validate_options)�
unbind_method�
consumer_uuid�idsrcCszg}g}|D]d}z|||�|�|�Wqtjyn}z,|jdkrF�|�|�t�|�WYd}~qd}~00q||fS)a(
        Method for unbinding entitlements
        :param unbind_method: unbindByPoolId or unbindBySerial
        :param consumer_uuid: UUID of consumer
        :param ids: List of serials or pool_ids
        :return: Tuple of two lists containing unbinded and not-unbinded subscriptions
        i�N)r��
connectionZRestlibException�coder-�error)rr�r�r��successZfailureZid_�rerrr�_unbind_ids	s


"zEntitlementService._unbind_ids)rcCs|j�|jj�}|j��|S)zY
        Try to remove all entitlements
        :return: Result of REST API call
        )r
Z	unbindAllrr�r�update)rZresponserrr�remove_all_entitlementss
z*EntitlementService.remove_all_entitlements)�pool_idsrcCsng}t�|�}|j��|j�|�}|�|jj|jj	|�\}}|rZ|D]}|�
||�qF|j��|||fS)z�
        Try to remove entitlements by pool IDs
        :param pool_ids: List of pool IDs
        :return: List of serial numbers of removed subscriptions
        )
r�unique_list_itemsrrzZlist_serials_for_pool_idsr�r
ZunbindByPoolIdrr��extendrr�)rr��removed_serialsZ	_pool_idsZpool_id_to_serialsZ
removed_poolsZunremoved_poolsrPrrr�remove_entitlements_by_pool_ids)s

�
z2EntitlementService.remove_entitlements_by_pool_ids)�serialsrcCs6t�|�}|�|jj|jj|�\}}|j��||fS)z�
        Try to remove pools by Serial numbers
        :param serials: List of serial numbers
        :return: Tuple of two items: list of serial numbers of already removed subscriptions and list
            of not removed serials
        )	rr�r�r
ZunbindBySerialrr�rr�)rr�Z_serialsr�Zunremoved_serialsrrr�remove_entitlements_by_serials@s
�
z1EntitlementService.remove_entitlements_by_serialscCs>tjtjdd�}t�tj�}t�d|j�d|_|��dS)z�
        This callback function is called, when there is detected any change in directory with entitlement
        certificates (e.g. certificate is installed or removed)
        N)rz#Clearing in-memory cache of file %s)	rrr,r/r-r.Z
CACHE_FILEr0r2)r5r6rrr�reloadPs
zEntitlementService.reload)�remove_cacher&rcCsn|dur@t�tj�}|��r$|��t�tj�}|��r@|��|durd|j�|j	j
d�sdt�d�|j
��S)z�
        Try to refresh entitlement certificate(s) from candlepin server
        :return: Report of EntCertActionInvoker
        TzOWarning: Unable to refresh entitlement certificates; service likely unavailable)rrZCONTENT_ACCESS_CACHE�exists�removeZCONTENT_ACCESS_MODE_CACHEr1r
ZregenEntitlementCertificatesrr�r-r.rr�)rr�r&Zcontent_accessZcontent_access_moderrrrz\s
zEntitlementService.refresh)N)NF)NNNNNNNNNNrr)NNF)NNNNNNNNrrF)FF)�__name__�
__module__�__qualname__r�Z
UEPConnectionr�classmethodr4rr%r�r�r7rrVrYr\rW�staticmethodrXrUr�tupler�r�r�r�r�rzrrrrr s�/�
�K��F��o!r)rxrZloggingr�typingrrZsubscription_managerrrZsubscription_manager.i18nrr!rrZsubscription_manager.entcertlibrZrhsmr	Zrhsmlib.servicesr
rZrhsm.connectionr�Z	getLoggerr�r-rrrrr�<module>s