403Webshell
Server IP : 172.67.201.108  /  Your IP : 216.73.216.55
Web Server : Apache/2.4.68 (Amazon Linux) OpenSSL/3.5.7
System : Linux ip-172-31-69-123.ec2.internal 6.1.177-224.371.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Jul 27 20:28:29 UTC 2026 x86_64
User : ec2-user ( 1000)
PHP Version : 8.4.24
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /lib/python3.9/site-packages/supportinfo/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3.9/site-packages/supportinfo/__pycache__/handler.cpython-39.pyc
a

us=jM��@srddlZddlmZmZddlmZmZddlmZmZm	Z	ddl
mZddlm
Z
ddlmZmZmZmZmZddlZddlmZdd	lmZmZe�e�ZGd
d�de�ZGdd
�d
ee�ZeGdd�d��ZeGdd�d��Z eGdd�d��Z!eGdd�d��Z"eGdd�d��Z#eGdd�d��Z$eGdd�d��Z%Gdd�de�Z&Gdd�de&�Z'Gd d!�d!e&�Z(dS)"�N)�ABC�abstractmethod)�	dataclass�field)�date�datetime�timezone)�Enum)�Path)�Dict�List�Optional�Set�Union)�	objectify)�XMLSchema10�XMLSchema11c@seZdZdZdZdS)�SupportinfoSchemaVersionsZunversionedz1.0N)�__name__�
__module__�__qualname__�LEGACY�V1_0�rr�7/usr/lib/python3.9/site-packages/supportinfo/handler.pyrsrc@seZdZdZdZdZdS)�SupportInfoStates�unknownZ	supportedZunsupportedN)rrr�UNKNOWN�	SUPPORTED�UNSUPPORTEDrrrrrsrc@sZeZdZUdZeed<dZeeed<dZeded<dZ	eeed<dZ
eeed<dS)	�	PhaseInfoa!Information about a single lifecycle phase.

    For legacy format:
        - name: Status value ("supported", "unsupported", "unknown")
        - start_date: Date when this phase begins (may be None for first phase)
        - support_level_info: Not used (None)
        - milestone: Not used (None)
        - display_name: Not used (None)

    For v1.0 format:
        - name: Phase name (e.g., "full_support", "maintenance_support", "end_of_life")
        - start_date: Resolved date string when phase begins (from start_date or milestone)
        - support_level_info: SupportLevelInfo with name, severities, description, and display_name
        - milestone: Original milestone name if start_date was resolved from milestone
        - display_name: Customer-facing display name for this phase
    �nameN�
start_date�SupportLevelInfo�support_level_info�	milestone�display_name)rrr�__doc__�str�__annotations__r"r
r$r%r&rrrrr s
r c@s2eZdZUdZeed<eed<dZeeed<dS)�PackageEntrya�Unified package entry structure.

    For legacy format:
        - name: Package name
        - statement_id: Statement ID from the XML (e.g., "al2023_core_support")
        - note_ref: Per-package note reference ID (e.g., "note_1")

    For v1.0 format:
        - name: Package name
        - statement_id: Lifecycle name the package references (e.g., "al2023_standard")
        - note_ref: Not used (None) - v1.0 has lifecycle-level notes instead
    r!�statement_idN�note_ref)rrrr'r(r)r,r
rrrrr*9s

r*c@sJeZdZUdZeed<dZeeed<dZeeed<dZ	eeed<dS)�
LifecycleInfoajInformation about a support lifecycle.

    Attributes:
        name: Unique identifier for the lifecycle (e.g., "eol_redis6_lc").
        note: Optional reference to a note providing additional context.
        display_name: Customer-facing display name for this lifecycle.
        description: Human-readable description of what this lifecycle represents.
    r!N�noter&�description)
rrrr'r(r)r.r
r&r/rrrrr-Ms

	r-c@szeZdZUdZeed<dZeeed<dZeeed<dZ	eeed<dZ
eeed<dZeeed<dZeeed	<dS)
�
OriginInfoa�Information about a package origin.

    Attributes:
        name: Unique identifier for the origin (e.g., "al2023_core").
        repo_id: Repository identifier.
        dist: Distribution name.
        vendor: Package vendor.
        signing_key: GPG signing key identifier.
        display_name: Customer-facing display name for this origin.
        description: Human-readable description of this package origin.
    r!N�repo_id�dist�vendor�signing_keyr&r/)
rrrr'r(r)r1r
r2r3r4r&r/rrrrr0^s
r0c@sBeZdZUdZeed<eed<dZeeed<dZ	eeed<dS)�
MilestoneInfoabInformation about a support milestone.

    Attributes:
        name: Unique identifier for the milestone (e.g., "AL2023_GA", "AL2023_EOS").
        date: The date associated with this milestone.
        display_name: Customer-facing display name for this milestone.
        description: Human-readable description of what this milestone represents.
    r!rNr&r/)
rrrr'r(r)rr&r
r/rrrrr5us

	r5c@sBeZdZUdZeed<eeed<eeed<dZeeed<dS)r#a}Information about a support level.

    Attributes:
        name: Unique identifier for the support level (e.g., "default", "limited", "eos").
        severities: Comma-separated severity values addressed at this level.
        description: Human-readable description of what this support level means.
        display_name: Customer-facing display name for this support level.
    r!�
severitiesr/Nr&)rrrr'r(r)r
r&rrrrr#�s

	r#c@s�eZdZUdZdZeeed<ee	d�Z
eeefed<dZ
eed<dZeed<dZeeed	<dZeeed
<dZeeed<dZeeed<dS)
�SupportStatementa%Consistent structure for support statement/lifecycle data.

    For legacy format:
        - current_phase: Calculated string ("supported", "unsupported", "unknown") based on marker and date
        - phases: Dict of phase_name -> PhaseInfo (supported -> unsupported or vice versa)

    For v1.0 format:
        - current_phase: Current phase name (e.g., "full_support", "maintenance_support")
        - phases: Dict mapping phase name to PhaseInfo for direct lookup
        - Client can look up support_level_info via phases.get(current_phase)
    N�
current_phase)�default_factory�phases��summary�text�link�lifecycle_note�
package_class�origin)rrrr'r8r
r(r)r�dictr:rr r<r=r>r?r@rAr0rrrrr7�s
r7c@s�eZdZUdZeeefed<eed<e	ed<d&e
ee
d�dd�Ze
ee
dd	�d
d��Ze
d'ee
ee
eed�d
d��Ze
d(eeee
efd�dd��Ze
ee
e
fd�dd��Ze
d)e
ee
eeeed�dd��Ze
d*ee
eeed�dd��Ze
d+ee
eeed�dd��Ze
d,ee
eeed�dd ��Zed-eeed�d!d"��Zed.e
ee
dd#�d$d%��Z dS)/�SupportinfoHandlerz3Abstract base class for handling supportinfo files.�schema�schema_path�schema_versionN)�supportinfo_pathrEcCs<||_t�|j�|_|�|�|j�|j�|j��|_dS)z�Initialize handler with supportinfo file path.

        Args:
            supportinfo_path: Path to the supportinfo XML file.
            schema_path: Path to custom schema file, or None to use default.
        N)	rGr�parse�xml_tree�_initialize_schemarDZvalidate�getroot�_root)�selfrGrErrr�__init__�s

zSupportinfoHandler.__init__�rE�returncCsdS)z�Initialize the schema for validation.

        Args:
            schema_path: Path to custom schema file, or None to use default.
        Nr)rMrErrrrJ�sz%SupportinfoHandler._initialize_schema��package_namerArPcCsdS)aGet package entries for a given package name.

        Args:
            package_name: Filter by package name, or None for all packages.
            origin: Filter by origin (V1.0 only, ignored for legacy).

        Returns:
            List of PackageEntry.
        Nr)rMrRrArrr�get_package_entries�s
z&SupportinfoHandler.get_package_entries��dayrPcCsdS)z�Return statement metadata for DNF plugin compatibility.

        Args:
            day: Date to check against (defaults to today).

        This returns structured metadata that DNF plugin expects.
        Nr)rMrUrrr�get_support_metadata�s	z'SupportinfoHandler.get_support_metadata�rPcCsdS)z�Return notes data for DNF plugin compatibility.

        Returns:
            Dict mapping note IDs to note text strings.
        Nr�rMrrr�get_support_notes�sz$SupportinfoHandler.get_support_notes�rRrArUrPcCsdS)aSGet full support info for a specific package.

        Args:
            package_name: Name of the package.
            origin: Origin filter (V1.0 only, ignored for legacy).
            day: Date to check against (defaults to today).

        Returns:
            SupportStatement with support data, or None if package not found.
        Nr)rMrRrArUrrr�get_package_support_info�sz+SupportinfoHandler.get_package_support_info��
support_levelrPcCsdS)a�Get support level metadata.

        Args:
            support_level: Name of the support level (e.g., "default", "limited", "eos").
                If None, returns all available support levels.

        Returns:
            List of SupportLevelInfo objects. If support_level parameter is provided,
            returns a list with one item (or None if not found). If support_level is None,
            returns list of all support levels.

            For legacy format: Returns list of SupportLevelInfo objects where each phase name
            (e.g., "supported", "unsupported") becomes the name field, with severities and
            description set to None.
        Nr)rMr]rrr�get_support_level_infosz)SupportinfoHandler.get_support_level_info��milestone_namerPcCsdS)a�Get milestone metadata.

        Args:
            milestone_name: Name of the milestone (e.g., "AL2023_GA", "AL2023_EOS").
                If None, returns all available milestones.

        Returns:
            List of MilestoneInfo objects. If milestone_name is provided,
            returns a list with one item (or None if not found). If milestone_name
            is None, returns list of all milestones.

            For legacy format: Returns empty list (no milestones in legacy schema).
        Nr�rMr`rrr�get_milestone_infosz%SupportinfoHandler.get_milestone_info��lifecycle_namerPcCsdS)a�Get lifecycle metadata.

        Args:
            lifecycle_name: Name of the lifecycle (e.g., "default_lc", "redis6_lc").
                If None, returns all available lifecycles.

        Returns:
            List of LifecycleInfo objects. If lifecycle_name is provided,
            returns a list with one item (or None if not found). If lifecycle_name
            is None, returns list of all lifecycles.

            For legacy format: Returns empty list (no lifecycles in legacy schema).
        Nr�rMrdrrr�get_lifecycle_info+sz%SupportinfoHandler.get_lifecycle_infocCs|pt�tj���S)z�Return the provided date, or today's date (UTC) if None.

        Args:
            day: Date to use, or None for today.

        Returns:
            The provided date, or today's date (UTC) if None.
        )rZnowrZutcr)rUrrr�_resolve_day>s
zSupportinfoHandler._resolve_day)rGrErPcCstt|���std|����t�|�}|��}t|d�rPd|jvrPt|jd�}ntj	}|tj
urjt||�St||�S)a�Factory method to create the appropriate handler based on schema version.

        Args:
            supportinfo_path: Path to the supportinfo XML file.
            schema_path: Path to custom schema file, or None to use default.

        Returns:
            SupportinfoHandlerLegacy or SupportinfoHandlerV10 instance.

        Raises:
            FileNotFoundError: If supportinfo file does not exist.
        zSupportinfo file not found: �attribrF)
r
�exists�FileNotFoundErrorrrHrK�hasattrrhrrr�SupportinfoHandlerV10�SupportinfoHandlerLegacy)rGrErI�rootrFrrr�createJs


zSupportinfoHandler.create)N)NN)N)NN)N)N)N)N)N)!rrrr'rrrr)r
rr(r
rNrrJrr*rSrrr7rVrYr[r#r^r5rbr-rf�staticmethodrgrorrrrrC�sZ

�� 
���
��
��
�rCc@sReZdZdZeedd�dd�Zd&eeeeeed�dd�Z	d'ee
eeefd	�d
d�Z
eeefd�d
d�Zd(eeeee
eed�dd�Zd)eeeeed�dd�Zd*eeeeed�dd�Zd+eeeeed�dd�Zd,eeeejd�dd�Zeje
ed�dd �Zejeeefd!�d"d#�Zeje
ed�d$d%�ZdS)-rmz3Handler for legacy (unversioned) supportinfo files.NrOcCsntj|_|dur*tt�jd}|d|_n
t|�|_|j��sNtd|j����t	�
t|j��|_t
�d�dS)z~Initialize legacy schema.

        Args:
            schema_path: Path to custom schema file, or None to use default.
        N�schemaszsupportinfo.xsd�Schema file not found: z$Schema version: unversioned (legacy))rrrFr
�__file__�parentrErirj�	xmlschemarr(rD�log�info�rMrEZschemas_dirrrrrJos

z+SupportinfoHandlerLegacy._initialize_schemarQc
Csf|�|�}g}|D]N}|jjD]@}|dus8|�d�|kr|�t|�d�|�d�|�d�d��qq|S)a9Get package entries for legacy format.

        Args:
            package_name: Filter by package name, or None for all packages.
            origin: Not used for legacy format (included for interface compatibility).

        Returns:
            List of PackageEntry with (name, statement_id, note_ref).
        Nr!�idr.�r!r+r,)�_get_statement_xml_elements�packages�package�get�appendr*)rMrRrA�
statements�entriesZstmt�pkgrrrrS�s
��z,SupportinfoHandlerLegacy.get_package_entriesrTcCs<|�|�}i}|jjjD]}|�d�}|�||�||<q|S)a�Return all statement metadata with status calculated for a given date.

        Iterates through all statements and calculates the support status
        for each based on marker and date comparisons.

        Args:
            day: Date to check against. Defaults to today (UTC) if None.

        Returns:
            Dict mapping statement IDs to SupportStatement objects containing:
            - status: Calculated SupportInfoStates based on marker and date
            - start_date: Statement start date string
            - end_date: Statement end date string
            - summary: Statement summary text
            - text: Statement description text
            - link: Associated URL
        ry)rgrLr��	statementr~�_build_statement_from_xml)rMrUr�r�Zstmt_idrrrrV�s

z-SupportinfoHandlerLegacy.get_support_metadatarWcCsFi}t|jd�rB|jjdurB|jjjD]}|�d�}t|�||<q&|S)z�Return notes data for DNF plugin.

        Returns:
            Dict mapping note IDs to note text strings.
            Empty dict if no notes section exists.
        �notesNry)rkrLr�r.r~r(�rMr�r.Znote_idrrrrY�s
z*SupportinfoHandlerLegacy.get_support_notesrZcCs,|�|�}|�|�}|sdS|�|d|�S)agGet full support info for a specific package.

        Args:
            package_name: Name of the package.
            origin: Not used for legacy format (included for interface compatibility).
            day: Date to check against (defaults to today).

        Returns:
            SupportStatement with support data, or None if package not found.
        Nr)rgr{r�)rMrRrArUr�rrrr[�s


z1SupportinfoHandlerLegacy.get_package_support_infor\cCs|t�}|jjjD]}|�|�}|�|���q|durR||vrNt|ddd�gSdSg}t|�D]}|�	t|ddd��q^|S)a�Get support level metadata from legacy format.

        Args:
            support_level: If provided, returns list with one item matching that phase name,
                or None if not found. If None, returns all unique phase names.

        Returns:
            List of SupportLevelInfo objects with phase names as the name field.
            Severities and description are None for legacy format.
        N)r!r6r/)
�setrLr�r��
_build_phases�update�keysr#�sortedr)rMr]Zphase_namesr�r:�resultr!rrrr^�s

z/SupportinfoHandlerLegacy.get_support_level_infor_cCs|durdSgS)z�Get milestone metadata from legacy format.

        Legacy format does not have milestones.

        Returns:
            Empty list if milestone_name is None, None if milestone_name is provided.
        Nrrarrrrb�s
z+SupportinfoHandlerLegacy.get_milestone_inforccCs|durdSgS)z�Get lifecycle metadata from legacy format.

        Legacy format does not have lifecycles.

        Returns:
            Empty list if lifecycle_name is None, None if lifecycle_name is provided.
        Nrrerrrrf
s
z+SupportinfoHandlerLegacy.get_lifecycle_info)rRrPcCs&|durt|jjj�S|jjd|d�S)z�Get raw XML statement elements for a package.

        Args:
            package_name: Name of the package to query, or None for all statements.

        Returns:
            List of XML statement elements containing the package.
        Nz,.//statement[packages/package[@name=$pname]])�pname)�listrLr�r��xpath)rMrRrrrr{sz4SupportinfoHandlerLegacy._get_statement_xml_elements)r�rUrPcCs�d}d}|�d�dur*t�|�d����}|�d�durLt�|�d����}|�d�}|tjjkr�|dur�||krxtjStjSn@|tjjkr�|dur�||kr�tjStjSnt�	d|���tj
SdS)z�Calculate status for a statement based on marker and date.

        Args:
            statement: XML statement element
            day: Date to check against

        Returns:
            SupportInfoStates enum value (acts as string)
        Nr"�end_date�markerzUnknown marker: )r~r�
fromisoformatrrr�valuerrvZwarningr)rMr�rUr"r�r�rrr�_calculate_statement_status*s"
z4SupportinfoHandlerLegacy._calculate_statement_status)r�rPcCs�|�d�}|�d�}|�d�}|tjjkrL|rLttjj|�ttjj|�g}n<|tjjkrx|rxttjj�ttjj|�g}nttjj|�g}|jdd�d�dd�|D�S)	a�Build phases dict for legacy format, sorted by start_date.

        Legacy format has two implicit phases based on marker:
        - marker="supported" with end_date: supported until end_date, then unsupported
        - marker="unsupported" with start_date: supported until start_date, then unsupported

        Args:
            statement: XML statement element

        Returns:
            Dict mapping phase name to PhaseInfo, sorted by start_date
        r"r�r�cSs
|jpdS�Nr;�r"��prrr�<lambda>o�z8SupportinfoHandlerLegacy._build_phases.<locals>.<lambda>��keycSsi|]}|j|�qSr�r!��.0�phaserrr�
<dictcomp>qr�z:SupportinfoHandlerLegacy._build_phases.<locals>.<dictcomp>)r~rrr�r rr�sort)rMr��start_date_strZend_date_strr��
phase_listrrrr�Ns


�
�z&SupportinfoHandlerLegacy._build_phasescCsh|�d�}|rt|d�nd}t|�||�j|�|�t|d�rHt|j�nd|t|d�r`t|j�ndd�S)z�Build SupportStatement from XML statement element.

        Args:
            statement: XML statement element
            day: Date to check against

        Returns:
            SupportStatement with calculated status and phases
        r=rr;r<r>N)r8r:r<r=r>)	r�r(r7r�r�r�rkr<r>)rMr�rU�
text_elementsZtext_contentrrrr�ss
�z2SupportinfoHandlerLegacy._build_statement_from_xml)NN)N)NN)N)N)N)N)rrrr'r
r(rJrr*rSrrr7rVrYr[r#r^r5rbr-rfr�ObjectifiedElementr{rr�r r�r�rrrrrmlsR�����
��
��
����$&�rmc@sXeZdZdZeedd�dd�ZdCeeeeeed�dd�Z	dDeeeee
eed	�d
d�ZdEeee
e
eefd�d
d�ZdFee
e
eefd�dd�Ze
eefd�dd�ZdGeeeeed�dd�Zeee
eefd�dd�Zeeed�dd�ZdHeeeeed�dd �ZdIeeeeed!�d"d#�ZdJeeeeeejd�d$d%�Zeeed!�d&d'�ZdKe
eefee
eed(�d)d*�Zeee
d�d+d,�Z ejed-�d.d/�Z!ejed0�d1d2�Z"ejeed3�d4d5�Z#ejed6�d7d8�Z$ee
eefd!�d9d:�Z%dLeee
ed;�d<d=�Z&dMejee
ed>�d?d@�Z'eed�dAdB�Z(dS)Nrlz#Handler for v1.0 supportinfo files.NrOcCsztj|_|dur6tt�jd}|d|jj�d�|_n
t|�|_|j��sZt	d|j����t
�t|j��|_
t�d�dS)z|Initialize v1.0 schema.

        Args:
            schema_path: Path to custom schema file, or None to use default.
        Nrqzsupportinfo-z.xsdrrzSchema version: 1.0)rrrFr
rsrtr�rErirjrurr(rDrvrwrxrrrrJ�s

z(SupportinfoHandlerV10._initialize_schemarQcCs>|�||�}g}|D]$}|�t|�d�|�d�dd��q|S)a$Get package entries for v1.0 format.

        Args:
            package_name: Filter by package name, or None for all packages.
            origin: Filter by origin name, or None for all origins.

        Returns:
            List of PackageEntry with (name, statement_id, note_ref).
        r!�	lifecycleNrz)�_get_package_xml_elementsrr*r~)rMrRrAr|r�r�rrrrS�s��z)SupportinfoHandlerV10.get_package_entriesrZcCs\|�||�}|sdSt|�dkrL|durLdd�|D�}td|�d|�d���|�|d|�S)	a�Get support info for a specific package.

        Args:
            package_name: Name of the package.
            origin: Origin filter. Required if package exists in multiple origins.
            day: Date to check against (defaults to today).

        Returns:
            SupportStatement with raw support data, or None if package not found.

        Raises:
            ValueError: If package exists in multiple origins and origin not specified.
        N�cSsg|]}|�d��qS)rA)r~)r�r�rrr�
<listcomp>�r�zBSupportinfoHandlerV10.get_package_support_info.<locals>.<listcomp>z	Package 'z' exists in multiple origins: zH. Please specify origin parameter or use get_all_package_support_info().r)r��len�
ValueError�_build_support_statement)rMrRrArUr|�originsrrrr[�s�z.SupportinfoHandlerV10.get_package_support_info)rRrUrPcCs:|�|�}|siSi}|D]}|�||�||�d�<q|S)a9Get support info for a package across all origins.

        Args:
            package_name: Name of the package.
            day: Date to check against (defaults to today).

        Returns:
            Dict keyed by origin name, with SupportStatement values.
            Empty dict if package not found.
        rA)r�r�r~)rMrRrUr|�resultsr}rrr�get_all_package_support_info�s
z2SupportinfoHandlerV10.get_all_package_support_inforTcCsHi}|jjjD]4}|�d�}|�||�}d|��|_d|_|||<q|S)aHReturn all lifecycles with current phase calculated at call time.

        Args:
            day: Date to check against (defaults to today).

        Returns:
            Dict mapping lifecycle names to SupportStatement objects containing
            current phase, support level, severities, and milestone information.
        r!zLifecycle: z%V1.0 format - lifecycle-based support)rL�
lifecyclesr�r~�_build_lifecycle_statementr<r=)rMrUr�r�rdr�rrrrV�s


z*SupportinfoHandlerV10.get_support_metadatarWcCs0i}|j�d�D]}|�d�}t|�||<q|S)z�Return notes data for DNF plugin.

        Returns:
            Dict mapping note names to note text strings.
            Empty dict if no notes exist.
        z
notes/noter!)rLr�r~r(r�rrrrY
s

z'SupportinfoHandlerV10.get_support_notesr\csJ|dur"�fdd��j�d�D�S�jjd|d�}|s:dS��|d�gS)a�Get support level metadata.

        Args:
            support_level: Name of the support level (e.g., "default", "limited", "eos").
                If None, returns all available support levels.

        Returns:
            List of SupportLevelInfo objects. If support_level parameter is provided,
            returns a list with one item (or None if not found). If support_level is None,
            returns list of all support levels.
        Ncsg|]}��|��qSr)�_build_support_level_info)r��levelrXrrr�(s�[email protected]_support_level_info.<locals>.<listcomp>zsupport_levels/support_levelz)support_levels/support_level[@name=$name]r�r)rLr�r�)rMr]ZlevelsrrXrr^s

�z,SupportinfoHandlerV10.get_support_level_info)�
class_namerPcCs`|jjd|d�}|sdS|d}|�d�}|�d�t|d�rFt|j�nd|rXt|d�ndd	�S)
z�Get package class metadata.

        Args:
            class_name: Name of the package class.

        Returns:
            Dict with 'name', 'summary', 'text' keys, or None if class not found.
        z*package_classes/package_class[@name=$name]r�Nrr=r!r<r;)r!r<r=)rLr�r~rkr(r<)rMr��classesZ	pkg_classr�rrr�get_package_class_info3s	
�z,SupportinfoHandlerV10.get_package_class_info)�origin_namerPcCs"|jjd|d�}|sdS|�|�S)z�Get package origin metadata.

        Args:
            origin_name: Name of the package origin.

        Returns:
            OriginInfo with origin metadata, or None if origin not found.
        �+package_origins/package_origin[@name=$name]r�N)rLr��_build_origin_info)rMr�r�rrr�get_package_origin_infoHs	z-SupportinfoHandlerV10.get_package_origin_infor_csJ|dur"�fdd��j�d�D�S�jjd|d�}|s:dS��|d�gS)a�Get milestone metadata.

        Args:
            milestone_name: Name of the milestone (e.g., "AL2023_GA", "AL2023_EOS").
                If None, returns all available milestones.

        Returns:
            List of MilestoneInfo objects. If milestone_name is provided,
            returns a list with one item (or None if not found). If milestone_name
            is None, returns list of all milestones.
        Ncsg|]}��|��qSr)�_build_milestone_info)r��mrXrrr�fs�z<SupportinfoHandlerV10.get_milestone_info.<locals>.<listcomp>zsupport_milestones/milestone�)support_milestones/milestone[@name=$name]r�r)rLr�r�)rMr`Z
milestonesrrXrrbWs

��z(SupportinfoHandlerV10.get_milestone_inforccsJ|dur"�fdd��j�d�D�S�jjd|d�}|s:dS��|d�gS)a�Get lifecycle metadata.

        Args:
            lifecycle_name: Name of the lifecycle (e.g., "eol_redis6_lc").
                If None, returns all available lifecycles.

        Returns:
            List of LifecycleInfo objects. If lifecycle_name is provided,
            returns a list with one item (or None if not found). If lifecycle_name
            is None, returns list of all lifecycles.
        Ncsg|]}��|��qSr)�_build_lifecycle_info)r�ZlcrXrrr��sz<SupportinfoHandlerV10.get_lifecycle_info.<locals>.<listcomp>zlifecycles/lifecycle�!lifecycles/lifecycle[@name=$name]r�r)rLr�r�)rMrdr�rrXrrfss

�z(SupportinfoHandlerV10.get_lifecycle_infocCspg}i}|dur"|�d�||d<|dur<|�d�||d<|rRdd�|��d�nd	}|jjd
|��fi|��S)a/Get raw XML package elements for internal use.

        Args:
            package_name: Filter by package name, or None for all packages.
            origin: Filter by origin name, or None for all origins.

        Returns:
            List of XML package elements matching the filter criteria.
        Nz@name=$pnamer�z@origin=$p_originZp_origin�[z and �]r;zpackages/package)r�joinrLr�)rMrRrAZ
conditions�paramsZ	predicaterrrr��s

z/SupportinfoHandlerV10._get_package_xml_elementscCs&|jjd|d�}|r"|d�d�SdS)aGet note reference for a lifecycle.

        Args:
            lifecycle_name: Name of the lifecycle to query.

        Returns:
            The note reference string if the lifecycle has a note attribute,
            None if lifecycle not found or has no note.
        r�r�rr.N)rLr�r~)rMrd�lifecycle_matchesrrr�_get_lifecycle_note�s
�z)SupportinfoHandlerV10._get_lifecycle_note)r:rUrPcCs\|�|�}d}d}|��D]<}|jrt�|j���}||kr|dusL||kr|}|j}q|S)a1Find the current phase name from phases dict.

        Args:
            phases: Dict mapping phase name to PhaseInfo.
            day: Date to check against.

        Returns:
            Name of the current phase (phase with latest start_date <= day),
            or None if no phase is active.
        N)rg�valuesr"rr�rr!)rMr:rUZcurrent_phase_nameZcurrent_phase_dater�Z
phase_daterrr�_find_current_phase�s
z)SupportinfoHandlerV10._find_current_phasecCs8|jjd|d�}|r4|d�d�}|r4t�|���SdS)z�Resolve a milestone name to its date.

        Args:
            milestone_name: Name of the milestone to resolve.

        Returns:
            The date associated with the milestone, or None if not found
        r�r�rrN)rLr�r~rr�r)rMr`r%Zdate_strrrr�_resolve_milestone_date�s
�z-SupportinfoHandlerV10._resolve_milestone_date)r%rPcCs2t|�d�t�|�d����|�d�|�d�d�S)z�Build MilestoneInfo from an XML milestone element.

        Args:
            milestone: XML milestone element from an XPath query.

        Returns:
            MilestoneInfo populated with name, date, display_name, and description.
        r!rr&r/)r!rr&r/)r5r~rr�r)rMr%rrrr��s	�z+SupportinfoHandlerV10._build_milestone_info)r�rPcCs(t|�d�|�d�|�d�|�d�d�S)z�Build LifecycleInfo from an XML lifecycle element.

        Args:
            lifecycle: XML lifecycle element from an XPath query.

        Returns:
            LifecycleInfo populated with name, note, display_name, and description.
        r!r.r&r/)r!r.r&r/)r-r~)rMr�rrrr��s	�z+SupportinfoHandlerV10._build_lifecycle_info)r�rPcCs>|�d�}|r|S|�d�}|r:|�|�}|r6|��SdSdS)z�Resolve start date for a phase (from start_date or milestone).

        Args:
            phase: XML phase element.

        Returns:
            ISO format date string, or None if no date can be resolved.
        r"�start_milestoneN)r~r�Z	isoformat)rMr�r�r`Z
resolved_daterrr�_resolve_phase_start_dates	


z/SupportinfoHandlerV10._resolve_phase_start_date)r�rPcCs(t|�d�|�d�|�d�|�d�d�S)a�Build SupportLevelInfo from an XML support_level element.

        Note:
            objectify.ObjectifiedElement is the type lxml assigns to every XML
            element parsed via lxml.objectify. XPath queries on the parsed tree
            return lists of these elements.

        Args:
            level: XML support_level element from an XPath query.

        Returns:
            SupportLevelInfo populated with name, severities, description, and display_name.
        r!r6r/r&)r!r6r/r&)r#r~)rMr�rrrr�s�z/SupportinfoHandlerV10._build_support_level_infocCs�|jjd|d�}|r"t|dd�s&iSg}|djD]l}|�d�}|rP|�|�nd}|rlt|�dkrl|dnd}|�t|�d�|�	|�||�d�|�d	�d
��q4|j
dd�d
�dd�|D�S)a:Build dict of phase name to PhaseInfo for a lifecycle, sorted by start_date.

        Args:
            lifecycle_name: Name of the lifecycle to query.

        Returns:
            Dict mapping phase name to PhaseInfo, sorted by start_date.
            Empty dict if lifecycle not found or has no phases.
        r�r�rr�r]Nr!r�r&)r!r"r$r%r&cSs
|jpdSr�r�r�rrrr�Pr�z5SupportinfoHandlerV10._build_phases.<locals>.<lambda>r�cSsi|]}|j|�qSrr�r�rrrr�Sr�z7SupportinfoHandlerV10._build_phases.<locals>.<dictcomp>)rLr�rkr�r~r^r�rr r�r�)rMrdr�r�r�Zsupport_level_nameZ	info_listrwrrrr�-s,
�
���z#SupportinfoHandlerV10._build_phases)rdrUrPcCs.|�|�}|�||�}|�|�}t|||d�S)a�Build a SupportStatement from lifecycle data.

        Args:
            lifecycle_name: Name of the lifecycle to query.
            day: Date to check against (defaults to today).

        Returns:
            SupportStatement populated with lifecycle data (no package-specific fields).
            Client can look up support_level/severities from current phase in phases list.
        )r8r:r?)r�r�r�r7)rMrdrUr:r8r?rrrr�Us

�z0SupportinfoHandlerV10._build_lifecycle_statement)r}rUrPcCs@|�d�}|�||�}|�d�|_|�d�}|r<|�|�|_|S)aMBuild a SupportStatement from a package XML element.

        Args:
            package: XML package element with lifecycle, package_class, origin attributes.
            day: Date to check against (defaults to today).

        Returns:
            SupportStatement populated with lifecycle data and package-specific fields.
        r�r@rA)r~r�r@r�rA)rMr}rUrdr�r�rrrr�ls

z.SupportinfoHandlerV10._build_support_statementc
Csf|jjd|d�}|st|d�S|d}t|�d�|�d�|�d�|�d�|�d�|�d	�|�d
�d�S)a,Build OriginInfo from origin name.

        Args:
            origin_name: Name of the origin to query.

        Returns:
            OriginInfo with origin metadata, including display_name and description.
            If origin not found in XML, returns OriginInfo with only name populated.
        r�r�rr!r1r2r3r4r&r/)r!r1r2r3r4r&r/)rLr�r0r~)rMr�r�rArrrr��s

�z(SupportinfoHandlerV10._build_origin_info)NN)NN)N)N)N)N)N)NN)N)N)N))rrrr'r
r(rJrr*rSrr7r[rr�rVrYr#r^r�r0r�r5rbr-rfrr�r�r�r r�r�r�r�r�r�r�r�r�r�rrrrrl�s������
��
��
��
�����)���
�rl))Zlogging�abcrrZdataclassesrrrrr�enumr	�pathlibr
�typingrrr
rrruZlxmlrrrZ	getLoggerrrvrr(rr r*r-r0r5r#r7rCrmrlrrrr�<module>s@
>#

Youez - 2016 - github.com/yon3zu
LinuXploit