
    Vh]                        d dl Z d dlZd dlZd dlZ G d d      Z G d de      Z G d de      Zedk(  r eej                        d	k7  sej                  d
   dvr& e
dej                          ej                  d
       ej                  d
   dk(  r	 ed      Zn ed      Zej                         Z e
 e j                   e             yy)    Nc                       e Zd Zd Zd Zy)GitHubReleasesc                      d| _         || _        y )Nzhttps://api.github.com)
github_apirepo)selfr   s     k/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/grafana/hacking/find_versions.py__init__zGitHubReleases.__init__
   s    2	    c                     t        j                  | j                   d| j                   dddi      }|j                  dk7  r%t        d| j                   d|j                         |j                         S )	Nz/repos/z/releases?per_page=100Acceptzapplication/vnd.github.v3+json)headers   zFailed to fetch releases for z: )requestsgetr   r   status_code	Exceptionjson)r   rs     r	   fetch_releaseszGitHubReleases.fetch_releases   ss    LLwtyyk1GH?@
 ==C/		{"Q]]OL  vvxr   N)__name__
__module____qualname__r
   r    r   r	   r   r   	   s    	r   r   c                       e Zd Zd Zd Zy)AnsibleReleasesc                    |j                  d      r|dd  }t        j                  d|      }g }|d d D ]I  }dj                  t	        t
        j                  |            }|j                  |rt        |      nd       K t        |      S )Nv   z[.-]    r   )

startswithresplitjoinfilterstrisdigitappendinttuple)r   versionparts
normalizedpartnumbers         r	   normalize_versionz!AnsibleReleases.normalize_version   s    c"abkG'*
"1I 	<DWWVCKK67FVc&k;	< Z  r   c                   	 | j                         }i }g }|D ]  }|j                  dd      		j                  d      s'| j                  	      }|j                  d      st	        	fddD              r|j                  |	f       qd|d    d	|d
    }||vs	||   |k  s|||<    t        |j                         d      }g }|r)|j                  d       |j                  |d   d
          |j                  |       |d d S )Ntag_namer!   r   
prereleasec              3   &   K   | ]  }|v  
 y wNr   ).0xr3   s     r	   	<genexpr>z6AnsibleReleases.get_latest_versions.<locals>.<genexpr>1   s      0"#X0   )alphabetarcbzstable-r   .r   Treverser    )
r   r   r"   r1   anyr)   sortedkeyssortextend)
r   releasesstable_releasesprerelease_candidatesreleaseversion_tuplemajor_minorsorted_stablesversionsr3   s
            @r	   get_latest_versionsz#AnsibleReleases.get_latest_versions%   s0   &&( " 	=G{{:r2H&&s+ 228<M{{<(C 0'C0 - &,,mX-FG#M!$4#5Q}Q7G6HIK?2";/-?/<,%	=(   4 4 6E !&&t&4OO1!4Q78'|r   N)r   r   r   r1   rO   r   r   r	   r   r      s    !"r   r   c                       e Zd Zd Zd Zd Zy)GrafanaReleasesc                 ~    |j                  d      r|dd  }t        t        t        |j	                  d                  S )Nr   r   r?   )r"   r+   mapr*   r$   r   r,   s     r	   r1   z!GrafanaReleases.normalize_versionK   s6    c"abkGSgmmC0122r   c                     |j                  d      }t        |j                  d      d         || j                  |      fS )Nr   r?   r   )lstripr*   r$   r1   rT   s     r	   get_by_majorzGrafanaReleases.get_by_majorP   s;    ..%7==%a()7D4J4J74SSSr   c                 t  	 | j                         }i }|D ]g  }|j                  dd      	|j                  d      st        	fddD              r;| j                  	      \  }}}||vs||   d   |k  s`||d||<   i t	        |j                         d	      d d
 }|D cg c]
  }||   d    }}|S c c}w )Nr3   r!   r4   c              3   &   K   | ]  }|v  
 y wr6   r   )r7   cr3   s     r	   r9   z6GrafanaReleases.get_latest_versions.<locals>.<genexpr>Z   s     /L!X/Lr:   z-+as_tuple)r,   r[   Tr@   r    r,   )r   r   rB   rW   rC   rD   )
r   rG   by_majorrJ   majorr,   r[   latest_3_majorslatest_releasesr3   s
            @r	   rO   z#GrafanaReleases.get_latest_versionsT   s    &&( 	MG{{:r2H{{<(C/Lt/L,L'+'8'8'B$E7HH$
(Ch(N.58"L	M !$?CCRS%8E?95SS Ts   "B5N)r   r   r   r1   rW   rO   r   r   r	   rQ   rQ   J   s    3
Tr   rQ   __main__   r   )grafanaansiblez)Usage: find_versions.py [grafana|ansible])filerb   zgrafana/grafanazansible/ansible)r   r   r#   sysr   r   rQ   r   lenargvprintstderrexitreleases_handlerrO   rN   dumpsr   r   r	   <module>rm      s      	 
 "-n -`n 8 z
388}SXXa[0FF9

K
xx{i*+<=*+<=335H	*$**X
 r   