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/rhsm/__pycache__/certificate.cpython-39.opt-1.pyc
a

X�Zh�|�@s�dZddlmZmZmZmZmZmZmZddl	Z	ddl
Z
ddlZddlZddl
mZddlZddlZe�e�Ze�d�Ze�d�Zedd�d	d
�Zedd�dd
�Zeeed�dd�ZGdd�dej�Zeejd�dd�Zeed�dd�ZGdd�d�ZGdd�de�Z Gdd�de �Z!Gdd�de!�Z"Gd d!�d!�Z#Gd"d#�d#�Z$Gd$d%�d%ej�Z%Gd&d'�d'e&�Z'Gd(d)�d)�Z(Gd*d+�d+�Z)Gd,d-�d-�Z*Gd.d/�d/�Z+Gd0d1�d1e+�Z,Gd2d3�d3e+�Z-Gd4d5�d5e.�Z/dS)6a�
Contains classes for working with x.509 certificates.

Several of the classes in this module are now marked deprecated in favor
of their new counterparts in certificate2 module. However, rather than
depending on either specifically, you can use the create methods below to
automatically create the correct object for any given certificate.

Eventually the deprecated classes below will be removed, and the new classes
will be relocated into this module.
�)�List�Any�Callable�Optional�Union�Tuple�DictN)�_certificatez([0-9]+\.)+[0-9]+:z.*prim:\s(\w*)\s*:*(.*)�EntitlementCertificate)�path�returncCsddlm}|��|�S)z�
    Try to create certificate object from path to certificate
    :param path: String with path to certificate
    :return: rhsm.certificate2.Certificate
    r��_CertFactory)�rhsm.certificate2r�create_from_file)rr�r�6/usr/lib64/python3.9/site-packages/rhsm/certificate.pyr4sr)�pemrcCsddlm}|��|�S)z�
    Try to create certificate object from PEM string
    :param pem: String with PEM
    :return: Instance of rhsm.certificate2.Certificate
    rr
)rr�create_from_pem)rrrrrr?sr)�tag_strrcCsg}|r|�d�}|S)zN
    Split a comma separated list of tags from a certificate into a list.
    �,��split)r�tagsrrr�
parse_tagsJs
rc@sNeZdZdZe�d�Zeejd�dd�Zee	d�dd�Z
eejd�dd�Zd	S)
�UTCr��dtrcCs|jS�N��_ZERO��selfrrrr�	utcoffsetYsz
UTC.utcoffsetcCsdS)Nrrr!rrr�tzname\sz
UTC.tznamecCs|jSrrr!rrr�dst_szUTC.dstN)�__name__�
__module__�__qualname__�__doc__�datetime�	timedeltar rr#�strr$r%rrrrrTs

r��datercCstj�|�Sr)�dateutil�parser�parse)r.rrr�get_datetime_from_x509csr2)�funcrcs.�fdd�}�j|_�j|_|j��j�|S)z�
    A decorator that marks a function as deprecated. This will cause a
    warning to be emitted any time that function is used by a caller.
    cs"tjd�jtd��|i|��S)NzCall to deprecated function: %s)�category)�warnings�warnr&�DeprecationWarning)�args�kwargs�r3rr�new_funcmszdeprecated.<locals>.new_func)r&r)�__dict__�update)r3r;rr:r�
deprecatedgs
r>c@seZdZdZed-ed�dd��Zedd�dd�Zed	�d
d�Z	e
d	�dd
�Zed	�dd�Zdd	�dd�Z
d.ejed�dd�Zd/ejed�dd�Zed	�dd�Zdd	�dd�Zedd�dd�Zedd�d d!�Zdd	�d"d#�Zed	�d$d%�Zed	�d&d'�Zed	�d(d)�Zded*�d+d,�ZdS)0�Certificatez�
    Represents and x.509 certificate.

    :ivar x509: The :obj:`X509` backing object.
    :type x509: :class:`X509`
    :ivar __ext: A dictionary of extensions `OID`:value
    :type __ext: dict of :obj:`Extensions`
    N��contentcCs|�|�d|_dS)zD
        :param content: The (optional) PEM encoded content
        N)�_updater�r"rArrr�__init__�s
zCertificate.__init__�rArcCsd|r"tj|d�}|dur*td��nt��}t|�|_||_|j��|_|j�	�|_
|jdd�|_dS)N�rzError loading certificateZsubjectAltName��name)
r	�load�CertificateException�X509�
Extensions�_Certificate__ext�x509Zget_subject�subjZget_serial_number�serialZ
get_extension�altName)r"rArNrrrrB�s

zCertificate._update�rcCs|jS)zQ
        Get the serial number

        :return: The x.509 serial number
        )rP�r"rrr�serialNumber�szCertificate.serialNumbercCs|jS)z�
        Get the certificate subject.

        note: Missing NID mapping for UID added to patch openssl.

        :return: A dictionary of subject fields.
        :rtype: dict
        )rOrSrrr�subject�s	zCertificate.subjectcCs|jS)z
        Return the alternate name of the certificate.

        :return: A string representation of the alternate name
        )rQrSrrr�
alternateName�szCertificate.alternateName�	DateRangecCstt|j���t|j����S)zS
        Get the valid date range.

        :return: The valid date range.
        )rWr2rNZget_not_beforeZ
get_not_afterrSrrr�
validRange�s�zCertificate.validRange)�on_datercCs8|��}tj�tjj�}|r |}|jt�d�}|�|�S)zf
        Get whether the certificate is valid based on date.

        :return: True if valid.
        ��tzinfo)rXr*�now�timezone�utc�replace�GMT�has_date�r"rY�valid_range�gmtrrr�valid�szCertificate.validcCs:|��}tj�tjj�}|r |}|jt�d�}|��|kS)zh
        Get whether the certificate is expired based on date.

        :return: True if valid.
        rZ)rXr*r\r]r^r_r`�endrbrrr�expired�szCertificate.expiredcCsgS)z�
        Get whether the certificate contains bogus data or is otherwise unsuitable.

        The certificate may be valid but still be considered bogus.

        :return: List of reasons if bogus
        rrSrrr�bogus�szCertificate.bogusrLcCs|jS)zt
        Get custom extensions.

        :return: An extensions object.
        :rtype: :class:`Extensions`
        )rMrSrrr�
extensions�szCertificate.extensions��pem_pathrcCs<t|�}|��}z|�|�W|��n
|��0||_|S)z[
        Read a certificate file
        :param pem_path: The path to a .pem file.
        )�open�readrB�closer)r"rk�frArrrrm�szCertificate.readcCs*t|d�}|�|���||_|��|S)zs
        Write the certificate.

        :param pem_path: The path to the .pem file.
        :return: self
        �w)rl�write�toPEMrrn�r"rkrorrrrq�s

zCertificate.writecCs$t|d�rt�|j�ntd��dS)�C
        Delete the file associated with this certificate.
        r�no path, not deletedN��hasattr�os�unlinkr�	ExceptionrSrrr�deletes
zCertificate.deletecCs
|j��S)z[
        Get PEM representation of the certificate.

        :return: A PEM string
        )rNZas_pemrSrrrrrszCertificate.toPEMcCs
|j��Sr)rNZas_textrSrrr�__str__szCertificate.__str__cCs(|��}d}t|d�r|j}d||fS)Nrz[sn: %d, path: "%s"])rTrwr)r"ZsnZ	cert_pathrrr�__repr__s

zCertificate.__repr__)�otherrcCs<|��}|��}|��}|��}||kr,dS||kr8dSdS)N����r)rXrf)r"r~rcZexp1Zother_valid_rangeZexp2rrr�__cmp__!szCertificate.__cmp__)N)N)N)r&r'r(r)r>r,rDrB�intrT�dictrUrVrXr*�boolrerg�listrhrirmrqr{rrr|r}r�rrrrr?ws&	


	
	r?csreZdZUdZdZeed<dd��fdd�Zdd�dd	�Zedd
�dd�Z	d
d�dd�Z
eed�dd�Z�Z
S)�RedhatCertificatezQ
    Represents a Red Hat certificate
    :cvar REDHAT: The Red Hat base OID
    z1.3.6.1.4.1.2312.9�REDHATNrRcs"tt|�j|i|��|��dSr)�superr�rD�_extract_redhat_extensions)r"r8r9��	__class__rrrD5szRedhatCertificate.__init__cCs|���|j�|_dSr)ri�branchr��_RedhatCertificate__redhatrSrrrr�9sz,RedhatCertificate._extract_redhat_extensionsrEcCst�||�|��dSr)r?rBr�rCrrrrB<szRedhatCertificate._updaterLcCs|jS)z�
        Get the extension subtree for the `redhat` namespace.

        :return: The extensions with the Red Hat namespace trimmed.
        )r�rSrrr�redhat@szRedhatCertificate.redhatcCsDt�|�}|��dkr |�d�|���d�}|s@|�d|�|S)zt
        Return list of reason, why the certificate is bogus
        :return: List of strings with reasons.
        r�zSerial number must be > 0�CNzInvalid common name: %s)r?rhrT�appendrU�get)r"rhZcnrrrrhHs

zRedhatCertificate.bogus)r&r'r(r)r�r,�__annotations__rDr�rBr�rrh�
__classcell__rrr�rr�-s
r�c@sTeZdZdZedd�dd�Zedd�dd�Zeed�d	d
�Z	ed�dd�Z
d
S)�ProductCertificatez�
    Represents a Red Hat product/entitlement certificate.

    It is OID schema aware and provides methods to
    get product information.
    )�ProductNrRcCsR|��}|�dd�}|rN|d}|d}|�d�}|d}|�|�}t||�SdS)za
        Get the product defined in the certificate.

        :return: A product object.
        �1.*.1r�rN)r��find�rtrimr�r�)r"�rhnsZproducts�p�oid�root�
product_id�extrrr�
getProduct^s

zProductCertificate.getProductr�cCsTg}|��}|�d�D]8}|d}|�d�}|d}|�|�}|�t||��q|S)zn
        Get a list products defined in the certificate.

        :return: A list of product objects.
        r�rr�)r�r�r�r�r�r�)r"�lstr�r�r�r�r�r�rrr�getProductsns

zProductCertificate.getProductscCst�|�}|Sr)r�rh�r"rhrrrrh~s
zProductCertificate.boguscCs�g}|�d�|�d�|�t�|��|�d�|�d�|�d|���|�d|���d��|��D]}|�t|��qnd�|�S)NzRAW:z#===================================zMODEL:zSerial#: %szSubject (CN): %sr��
)	r�r?r|rTrUr�r�r,�join)r"�sr�rrrr|�s



zProductCertificate.__str__N)r&r'r(r)rr�rr�r,rhr|rrrrr�Vs
r�cs�eZdZdZedd�dd�Zdd�dd�Zd	d�d
d�Zedd�d
d�Z	edd�dd�Z
edd�dd�Ze�fdd��Z
edd��Zeed�dd�Zed�dd�Z�ZS)r
z0
    Represents an entitlement certificate.
    NrEcCs`t�||�|��}|�ddd�}|rV|d}|d}|�d�}|�|�}t|�|_nd|_dS)Nz4.1r�Tr)r�rBr�r�r�r��Order�order)r"rAr�r�r�r�r�r�rrrrB�s

zEntitlementCertificate._updaterRcCsFt|d�r:t�|j�|j�d�}d|d}t�|�ntd��dS)rtr�.z
%s-key.pemrruN)rwrxryrrrz)r"�partsZkey_pathrrrr{�s
zEntitlementCertificate.deleter�cCs|jS)zl
        Get the :obj:`order` object defined in the certificate.

        :return: An order object.
        )r�rSrrr�getOrder�szEntitlementCertificate.getOrder�EntitlementcCs|��|��S)zr
        Get all entitlements defined in the certificate.

        :return: A list of entitlement object.
        )�getContentEntitlements�getRoleEntitlementsrSrrr�getEntitlements�sz&EntitlementCertificate.getEntitlementscCsNg}|��}|�d�}|D].}|d}|�d�}|�|�}|�t|��q|S)z}
        Get the B{content} entitlements defined in the certificate.

        :return: A list of entitlement object.
        z2.*.1.1rr�)r�r�r�r�r��Content�r"r�r�Zentitlements�entr�r�r�rrrr��s


z-EntitlementCertificate.getContentEntitlements�RolecCsNg}|��}|�d�}|D].}|d}|�d�}|�|�}|�t|��q|S)z�
        Get the *role* entitlements defined in the certificate.

        :return: A list of entitlement object.
        :rtype: [:obj:`Role`,..]
        z3.*.1rr�)r�r�r�r�r�r�r�rrrr��s


z*EntitlementCertificate.getRoleEntitlementscstt|���Sr)r�r
rXrSr�rr�validRangeWithGracePeriod�sz0EntitlementCertificate.validRangeWithGracePeriodcCs|����Sr)r��has_nowrSrrr�validWithGracePeriod�sz+EntitlementCertificate.validWithGracePeriodcCs$t�|�}|��dur |�d�|S)NzNo order information)r�rhr�r�r�rrrrh�s

zEntitlementCertificate.boguscCsPg}|��}|�t�|��|��D]}|�t|��q$|�t|��d�|�S)Nr�)r�r�r�r|r�r,r�)r"r�r�r�rrrr|�szEntitlementCertificate.__str__)r&r'r(r)r,rBr{r�rr�r�r�r>r�r�rhr|r�rrr�rr
�s

c@speZdZdZeedd�dd��Zed�dd�Zeed�d	d
�Z	edd�dd�Z
d
d�dd�Zed�dd�Zd
S)�Keyzc
    The (private|public) key.

    :ivar content: The PEM encoded key.
    :type content: str
    rjcCs*t|�}|��}|��t|�}||_|S)zT
        Read the key.

        :param pem_path: The path to the .pem file.
        )rlrmrnr�r)�clsrkrorA�keyrrrrmszKey.readr@cCs||_d|_dS)z6
        :param content: The PEM encoded key.
        N)rArrCrrrrDszKey.__init__rRcCs6g}|jr(tj|jd�}|s2|�d�n
|�d�|S)NrFzInvalid key datazNo key data provided)rAr	Zload_private_keyr�)r"rhr�rrrrhs
z	Key.boguscCs4t|d�}|�|j�||_|��t�|d�|S)zU
        Write the key.

        :param pem_path: The path to the .pem file.
        rpi�)rlrqrArrnrx�chmodrsrrrrq%s
z	Key.writeNcCs$t|d�rt�|j�ntd��dS)z;
        Delete the file associated with this key.
        rruNrvrSrrrr{2s
z
Key.deletecCs|jSrr@rSrrrr|;szKey.__str__)
r&r'r(r)�classmethodr,rmrDrrhrqr{r|rrrrr��s

	r�c@s�eZdZdZejejd�dd�Zejejd�dd�Zejd�d	d
�Zejd�dd�Ze	d�d
d�Z
eje	d�dd�Zedd��Z
edd��Zed�dd�ZdS)rWzj
    Date range object.

    :ivar begin_date: The beginning date
    :ivar end_date: The ending date
    )�
begin_date�end_datecCs|�|�|_|�|�|_dSr)�_convert_to_utc�_begin�_end)r"r�r�rrrrDGszDateRange.__init__)�	timestamprcCs(|jdur|jt�d�S|�t��SdS)NrZ)r[r_r`Z
astimezone)r"r�rrrr�Ks
zDateRange._convert_to_utcrRcCs|jS)zS
        Get range beginning.

        :return: The beginning date in UTC.
        )r�rSrrr�beginQszDateRange.begincCs|jS)zG
        Get range end.

        :return: The end date in UTC.
        )r�rSrrrrfYsz
DateRange.endcCs(tj�tjj�}|jt�d�}|�|�S)zn
        Get whether the certificate is valid based on the date now.

        :return: True if valid.
        rZ)r*r\r]r^r_r`ra)r"rdrrrr�aszDateRange.has_nowr-cCs||��ko||��kS)zj
        Get whether the certificate is valid based on the date.

        :return: True if valid.
        )r�rf�r"r.rrrrakszDateRange.has_datecCs
|�|�Sr)rar�rrr�hasDatesszDateRange.hasDatecCs|��Sr)r�rSrrr�hasNowwszDateRange.hasNowcCsd|j|jfS)Nz
	%s
	%s)r�r�rSrrrr|{szDateRange.__str__N)r&r'r(r)r*rDr�r�rfr�r�rar>r�r�r,r|rrrrrW?s


rWc@s@eZdZdZeejd�dd�Zeed�dd�Z	ed�dd�Z
d	S)
r`rcCstjdd�S�Nr)Zseconds�r*r+r!rrrr#�sz
GMT.utcoffsetcCsdS)Nr`rr!rrrr$�sz
GMT.tzname)rcCstjdd�Sr�r�r!rrrr%�szGMT.dstN)r&r'r(r)rr*r+r#r,r$r%rrrrr`sr`c@s�eZdZdZeeejfd�dd�Ze	dd�dd�Z
deed	feeed
�dd�Z
ded	efe	eeed	efd�dd�Zed	efdd�dd�Zejdd�dd�Zed�dd�ZdS)rLz2
    Represents x.509 (v3) custom extensions.
    )rNcCs$t|t�r|�|�n
|�|�dSr)�
isinstancer�r=�_parse)r"rNrrrrD�s
zExtensions.__init__��nrcCs0i}t|���D]\}}|||�|�<qt|�S)zv
        Left trim *n* parts.

        :param n: The number of parts to trim
        :return: The trimmed OID
        )r��items�ltrimrL)r"r��dr��vrrrr��szExtensions.ltrimN�OID)r��defaultrcCs&|�|dd�}|r|ddS|SdS)a

        Get the value of an extension by *oid*.

        Note: The *oid* may contain (*) wildcards.

        :param oid: An `OID` that may contain (*) wildcards.
        :param default: Default value.
        :return: The value of the first extension matched.
        r�TrN)r�)r"r�r�r�rrrr��s
zExtensions.getrF)r��limit�ignoreOrderrc	Cs~g}d}t|t�rt|�}|r,t|���}nt|���}|D]<}|�|�rh||}|�||f�|d}|r<||kr<qzq<|S)aZ
        Find all extensions matching the oid.

        Note: The oid may contain (*) wildcards.

        :param oid: An OID that may contain (*) wildcards.
        :param limit: Limit the number returned, 0=unlimited
        :param ignoreOrder: Should OIDs be ordered
        :return: A list of matching items.
        :see: OID.match()
        rr�)r�r,r�r��keys�sorted�matchr�)	r"r�r�r�r��foundZkeyset�kr�rrrr��s

zExtensions.find)r�rcCsbi}t|t�rt|�}|dr(|�d�}t|�d}|�|�D]\}}|�|�}|||<q>t|�S)z�
        Find a subtree by matching the oid.

        :param root: An `OID` that may contain (*) wildcards.
        :return: A subtree.
        r�r�)r�r,r�r��lenr�r�rL)r"r�r�Zlnr�r�Ztrimmedrrrr��s



zExtensions.branch)rNrcCs.t|�����D]\}}t|�}|||<qdS)z'
        Parse the extensions.
        N)r�Zget_all_extensionsr�r�)r"rNr��valuerrrr��szExtensions._parserRcCs.g}t|���D]}|�d|�qd�|�S)Nz	%s = "%s"r�)r�r�r�r�)r"r��itemrrrr|�szExtensions.__str__)N)rF)r&r'r(r)rr�r	rKrDr�r�r,rr�r�rrr�r�r�r|rrrrrL�s �
�&rLc@s eZdZUdZdZeed<eed�dd��Zeee	ed�dd	��Z
eee	efd
�dd�Ze
dd�d
d�Zedd�dd�Zedd�dd�Zedefdd�dd�Zded�dd�Zed�dd�Zeed�dd�Zed�dd�Zed�d d!�Zed�d"d#�Zed�d$d%�Zed�d&d'�Zd(S))r�zo
    The Object Identifier object
    :ivar part: The oid parts
    :cvar WILDCARD: The wildcard character
    �*�WILDCARDrRcGs
d�|�S�Nr�)r�)r�r�rrrr�szOID.join)r�rcCs
|�d�S)zy
        Split an OID string.

        :param s: An OID string Eg: (1.2.3)
        :return: A list of OID parts.
        r�r)r�r�rrrrsz	OID.split)r�cCs4t|t�r|�|�|_n||_d|_d|_d|_dS)z,
        :param oid: The OID value.
        N)r�r,r�part�_len�_str�_hash)r"r�rrrrDs
zOID.__init__cCs|jdd�}|rt|�SdS)zG
        Get the parent OID.

        :return: The parent OID.
        Nr)r�r�)r"r�rrr�parentsz
OID.parentr�cCst|j|d��S)zx
        Left trim I{n} parts.

        :param n: The number of parts to trim.
        :return: The trimmed OID
        N�r�r��r"r�rrrr�(sz	OID.ltrimcCst|jd|��S)zy
        Right trim I{n} parts.

        :param n: The number of parts to trim.
        :return: The trimmed OID
        Nr�r�rrrr�1sz	OID.rtrim)r�rcCs&t|t�rt|�}|j|j}t|�S)z�
        Append the specified OID fragment.

        :param oid: An OID fragment.
        :return: The concatenated OID.
        )r�r,r�r�)r"r�r�rrrr�:s
z
OID.appendcCs�d}|ds.|dd�}|jt|�d�}n.|dsV|dd�}|jdt|��}n|j}t|�t|�krpdS|D].}||}||ks�||jkr�|d7}qtdSqtdS)aN
        Match the specified OID considering wildcards.

        Patterns:
          - 1.4.5.6.74 (not wildcarded)
          -    .5.6.74 (match on only last 4)
          -    5.6.74. (match only first 4)
          - 1.4.*.6.*  (wildcard pattern)

        :param oid: An OID string or object.
        :return: True if matched
        rr�NrFT)r�r�r�)r"r��ir��x�valrrrr�Fs 

z	OID.matchcCs|jst|j�|_|jSr)r�r�r�rSrrr�__len__nszOID.__len__)�indexrcCs
|j|Sr)r�)r"r�rrr�__getitem__tszOID.__getitem__cCst|�Sr�r,rSrrrr}wszOID.__repr__cCs|jstt|��|_|jSr)r��hashr,rSrrr�__hash__zszOID.__hash__cCst|�t|�kSrr��r"r~rrr�__eq__�sz
OID.__eq__cCst|�t|�kSrr�r�rrr�__lt__�sz
OID.__lt__cCs|jsd�|j�|_|jSr�)r�r�r�rSrrrr|�szOID.__str__N)r&r'r(r)r�r,r�r�r�rrrrDrr�r�r�r�r�r�r�r�r�r}r�r�r�r|rrrrr��s&
	

		(r�c@s�eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)S)*r�cCs
||_dSr�r��r"r�rrrrD�szOrder.__init__cCs|j�d�S�N�1�r�r�rSrrr�getName�sz
Order.getNamecCs|j�d�S�N�2r�rSrrr�	getNumber�szOrder.getNumbercCs|j�d�S)N�3r�rSrrr�getSku�szOrder.getSkucCs|j�d�S)N�4r�rSrrr�getSubscription�szOrder.getSubscriptioncCs|j�d�S)N�5r�rSrrr�getQuantity�szOrder.getQuantitycCs|j�d�S)N�6r�rSrrr�getStart�szOrder.getStartcCs|j�d�S)N�7r�rSrrr�getEnd�szOrder.getEndcCs|j�d�S)N�8r�rSrrr�getVirtLimit�szOrder.getVirtLimitcCs|j�d�S)N�9r�rSrrr�getSocketLimit�szOrder.getSocketLimitcCs|j�d�S)N�10r�rSrrr�getContract�szOrder.getContractcCs|j�d�S)a

        Returns the quantity of the subscription that *this* entitlement is using.

        WARNING: a little misleading as it (a) is part of the order namespace
        and (b) sounds suspiciously like the total consumed quantity of the
        subscription.
        Z11r�rSrrr�getQuantityUsed�szOrder.getQuantityUsedcCs|j�d�S)NZ12r�rSrrr�getWarningPeriod�szOrder.getWarningPeriodcCs|j�d�S)NZ13r�rSrrr�getAccountNumber�szOrder.getAccountNumbercCs|j�d�S)NZ14r�rSrrr�getProvidesManagement�szOrder.getProvidesManagementcCs|j�d�S)NZ15r�rSrrr�getSupportLevel�szOrder.getSupportLevelcCs|j�d�S)NZ16r�rSrrr�getSupportType�szOrder.getSupportTypecCs|j�d�S)NZ17r�rSrrr�
getStackingId�szOrder.getStackingIdcCs|j�d�S)NZ18r�rSrrr�getVirtOnly�szOrder.getVirtOnlycCsTg}|�d�|�d|���|�d|���|�d|���|�d|���|�d|���|�d|���|�d|���|�d	|���|�d
|�	��|�d|�
��|�d|���|�d
|���|�d|�
��|�d|���|�d|���|�d|���|�d|���|�d�d�|�S)NzOrder {z	Name .............. = %sz	Number ............ = %sz	SKU ............... = %sz	Subscription ...... = %sz	Quantity .......... = %sz	Start (Ent) ....... = %sz	End (Ent) ......... = %sz	Virt Limit ........ = %sz	Socket Limit ...... = %sz	Contract .......... = %sz	Warning Period .... = %sz	Account Number .... = %sz	Provides Management = %sz	Support Level ..... = %sz	Support Type ...... = %sz	Stacking Id ....... = %sz	Virt Only ......... = %s�}r�)r�r�r�r�r�rrrrrr
rr
rrrrrr��r"r�rrrr|�s*

z
Order.__str__N)r&r'r(r>rDr�r�r�r�rrrrrr
rrr
rrrrrr|rrrrr��s*

r�c@s�eZdZeeedd�dd��Zed�dd�Zed�dd	�Zed�d
d�Z	ed�dd
�Z
eed�dd�Zed�dd�Z
ed�dd�Zed�dd�Zed�dd�Zdd�ZdS)r�N)�p_hashr�rcCsh||_||_|j�d�|_|j�d�|_|j�d�|_t|j�d��|_|j�d�|_|j�d�|_	dS)Nr�r�r�r�r�r)
r�r�r�rH�version�archr�
provided_tags�
brand_type�
brand_name)r"rr�rrrrD�szProduct.__init__rRcCs|jSr)r�rSrrr�getHash�szProduct.getHashcCs|jSrrGrSrrrr��szProduct.getNamecCs|jSr)rrSrrr�getArch�szProduct.getArchcCs|jSr)rrSrrr�
getVersion�szProduct.getVersioncCs|jSr)rrSrrr�getProvidedTags�szProduct.getProvidedTagscCs|jSr)rrSrrr�getBrandTypeszProduct.getBrandTypecCs|jSr)rrSrrr�getBrandNameszProduct.getBrandNamecCs|��|��kSr)r�r"�rhsrrrr�szProduct.__eq__cCs�g}|�d�|�d|���|�d|���|�d|���|�d|���|�d|���|�d|���|�d|���|�d	�d
�|�S)Nz	Product {z	Hash ......... = %s�	Name ......... = %sz	Version ...... = %sz	Architecture . = %sz	Provided Tags  = %sz	Brand Type     = %sz	Brand Name     = %srr�)	r�rr�rrrrr r�rrrrr|s

zProduct.__str__cCst|�Srr�rSrrrr}szProduct.__repr__)r&r'r(r>r,rLrDrr�rrrrrr r�r�r|r}rrrrr��s

r�c@seZdZed�dd�ZdS)r�r�cCs
||_dSrr�r�rrrrDszEntitlement.__init__N)r&r'r(rLrDrrrrr�sr�c@s�eZdZed�dd�Zed�dd�Zed�dd�Zed�d	d
�Zed�dd�Z	ed�d
d�Z
ed�dd�Zed�dd�Zed�dd�Z
ed�dd�Zeed�dd�Zded�dd�Zed�dd�Zed�dd�Zed�d d!�Zd"S)#r�r�cCs�t�||�|j�d�|_|j�d�|_|j�d�|_|j�d�|_|j�d�|_|j�d�|_	|j�d�|_
|j�d�|_|j�d	�|_t
|j�d
��|_dS)Nr�r�r�r�r�rrrrr	)r�rDr�r�rH�label�quantity�
flex_quantity�vendor�url�gpg�enabled�metadata_expirer�
required_tagsr�rrrrD"szContent.__init__rRcCs|jSrrGrSrrrr�/szContent.getNamecCs|jSr)r$rSrrr�getLabel2szContent.getLabelcCs|jSr)r%rSrrrr5szContent.getQuantitycCs|jSr)r&rSrrr�getFlexQuantity8szContent.getFlexQuantitycCs|jSr)r'rSrrr�	getVendor;szContent.getVendorcCs|jSr)r(rSrrr�getUrl>szContent.getUrlcCs|jSr)r)rSrrr�getGpgAszContent.getGpgcCs|jSr)r*rSrrr�
getEnabledDszContent.getEnabledcCs|jSr)r+rSrrr�getMetadataExpireGszContent.getMetadataExpirecCs|jSr)r,rSrrr�getRequiredTagsJszContent.getRequiredTags�r"rcCst||j�o|j|jkSr)r�r�r$r!rrrr�MszContent.__eq__cCs�g}|�d�|�d|���|�d|���|�d|���|�d|���|�d|���|�d|���|�d|���|�d	|���|�d
|�	��|�d|�
��|�d�d
�|�S)NzEntitlement (content) {z	Name .......... = %sz	Label ......... = %sz	Quantity ...... = %sz	Flex Quantity . = %sz	Vendor ........ = %sz	URL ........... = %sz	GPG Key ....... = %sz	Enabled ....... = %sz	Metadata Expire = %sz	Required Tags . = %srr�)r�r�r-rr.r/r0r1r2r3r4r�rrrrr|Ps

zContent.__str__cCst|�Srr�rSrrrr}`szContent.__repr__cCs
t|j�Sr)r�r$rSrrrr�cszContent.__hash__N)r&r'r(rLrDr,r�r-rr.r/r0r1r2r3rr4r�r�r|r}r�r�rrrrr�!s
r�c@sTeZdZed�dd�Zed�dd�Zded�dd�Zed�d	d
�Zed�dd�Z	d
S)r�rRcCs|j�d�Sr�r�rSrrrr�hszRole.getNamecCs|j�d�Sr�r�rSrrr�getDescriptionkszRole.getDescriptionr5cCs|��|��kSr)r�r!rrrr�nszRole.__eq__cCsFg}|�d�|�d|���|�d|���|�d�d�|�S)NzEntitlement (role) {r#z	Description .. = %srr�)r�r�r6r�rrrrr|qs

zRole.__str__cCst|�Srr�rSrrrr}ysz
Role.__repr__N)
r&r'r(r,r�r6r�r�r|r}rrrrr�gs
r�c@seZdZdS)rJN)r&r'r(rrrrrJ}srJ)0r)�typingrrrrrrrr/rx�rer*Zrhsmr	Zloggingr5Z	getLoggerr&�log�compileZOID_PATTERNZ
VALUE_PATTERNr,rrrr[rr2r>r?r�r�r
r�rWr`r�rLr�r�r�r�r�r�rzrJrrrr�<module>sD$



7):lC@
nZ5F