
    Vh                        d dl mZmZmZ eZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlZdZdZdez   ZdZ G d	 d
ej*                        Zd Zd Zd Zd Zd Zd Zd Zd Zedk(  r ej@                   e              yy)    )absolute_importdivisionprint_functionN)request)ElementTreez1https://packagecloud.io/sensu/stable/el/8/x86_64/z/sensu-go-agent_{0}.{1}.{2}.{3}_en-US.{arch}.msizAhttps://s3-us-west-2.amazonaws.com/sensu.io/sensu-go/{0}.{1}.{2}/)      r   c                   (     e Zd ZdZd Z fdZ xZS )	ArgParserz/An argument parser that displays help on error.c                     t         j                  j                  dj                  |             | j	                          t        j
                  d       y )Nzerror: {0}
   )sysstderrwriteformat
print_helpexit)selfmessages     i/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/sensu/sensu_go/tools/windows-versions.pyerrorzArgParser.error   s4    

..w78    c                 H    t         t        |          }d|_        d|_        |S )NTcommand)superr   add_subparsersrequireddest)r   kwargs
subparsers	__class__s      r   r   zArgParser.add_subparsers$   s'    9d:<
"
#
r   )__name__
__module____qualname____doc__r   r   __classcell__)r!   s   @r   r   r      s    9
 r   r   c            	      t   t               } t        j                  t        dz   d      }t	        j
                  |      j                         }|j                  d      D ]  }|j                  d      dk(  s n | S t        |j                  d            }|j                  d   }t        j                  t        |z   d      }t	        j                  t        j                  |j                                     }|j                  d	      D ]  }t        |j                  d
            }|j                  dk7  r-t        |j                  d            }t!        d |j                  d      j#                  d      D              }	|	t$        k  r| j'                  |	t)        |j                  d            fz           | S )Nzrepodata/repomd.xml   )timeoutz){http://linux.duke.edu/metadata/repo}datatypeprimaryz-{http://linux.duke.edu/metadata/repo}locationhrefz.{http://linux.duke.edu/metadata/common}packagez+{http://linux.duke.edu/metadata/common}namezsensu-go-agentz.{http://linux.duke.edu/metadata/common}versionc              3   2   K   | ]  }t        |        y wNint.0cs     r   	<genexpr>z,_fetch_available_versions.<locals>.<genexpr>B   s     Lc!fL   ver.rel)setr   urlopenBASE_REPO_URLr   parsegetrootitergetnextattrib
fromstringgzip
decompressreadtexttuplesplitMINIMAL_VERSIONaddr0   )
available_versionsresponserootdatalocationpathpackagenameversionversion_tuples
             r   _fetch_available_versionsrU   ,   sr   }/DDbQHX&..0D		EF "88Fy(" "!DIIMNOH??6"D}t3R@H!!$//(--/"BCD99MN 
LGLL!NOP99((w||$TUVLgkk%.@.F.Fs.KLL?*}GKK4F0G/JJK
L r   c                 H    t        d | d   j                         D              S )Nc              3   r   K   | ]/  }t        d  |d   j                  d      D              |d   fz    1 yw)c              3   2   K   | ]  }t        |        y wr.   r/   r1   s     r   r4   z5_load_versions_from_vars.<locals>.<genexpr>.<genexpr>M   s     :!s1v:r5   rS   r7   buildN)rG   rH   )r2   items     r   r4   z+_load_versions_from_vars.<locals>.<genexpr>L   s>       
:tI44S9:	:d7m=M	Ms   57_msi_lookup)r9   values)varss    r   _load_versions_from_varsr^   K   s*     '..0  r   c           	      b   t        | i       }| d   }|d   }t        j                  |      }t        |      D ]_  }dj	                  t        t        |d d             }||v r	||   ||<   3i }	dD ]  }
t        j                  |d|
i}t        j                  |d|
i}||z  }|j                         sOt        d|z          t        |d      5 }t        j                  |      }t        j                   ||       d d d        nt        d	|z          t#        j$                  d
dt        |      dfdd      }|j&                  j)                         D ]0  }|j+                  d      \  }}|dk(  s|j-                  d      |	|
<   2  t        ||d   |	      ||<   b |   |d<   |S # 1 sw Y   xY w)N)r[   r[   r7      )x86x64archzDownloading wbzReusing msiinfoexportPropertyT)capture_outputcheck   	s   ProductCodeascii)rS   rY   product_codeslatest)dictpathlibPathsortedjoinmapstrDOWNLOAD_URL_TEMPLATEr   FILENAME_TEMPLATEis_fileprintopenr   r:   shutilcopyfileobj
subprocessrunstdout
splitlinesrH   decode)r]   rK   	cache_dirnew_varsold_msisnew_msiscacherS   version_strrm   rc   urlfilenamefilefprL   processlinefieldvalues                       r   _sync_versionsr   R   s   Db)HM"H&HLL#E,- "
hhs345("$,[$9H[! " 	@D'..CdCC(//DtDH8#D<<>nx/0$% 5&s3H&&x45 5 j8+, nnHc$i<TG  113 @#zz%0uN**/,,w*?M$'@#	@, !%wr{-!
A"
H "+.HXO+5 5s   ,F%%F.c                 p    t        | d      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w)Nr)rz   yaml	safe_load)r   fds     r   _load_windows_vars_filer      s/    	h	 "~~b!" " "s   ,5c                 r    t        | d      5 }t        j                  ||       d d d        y # 1 sw Y   y xY w)Nw)rz   r   	safe_dump)r   r]   r   s      r   _save_windows_vars_filer      s1    	h	 !tR ! ! !s   -6c                 `   t        | j                        }t        |      }t               }||z
  }||z
  }|r0t	        dj                  dj                  d |D                           |r0t	        dj                  dj                  d |D                           t        |      t        |      z   S )Nz'The following versions are missing: {0}z, c              3   Z   K   | ]#  }d j                  t        t        |             % ywr7   Nrs   rt   ru   r2   vs     r   r4   z_check.<locals>.<genexpr>   s     =chhs3{+=   )+z(The following versions are obsolete: {0}c              3   Z   K   | ]#  }d j                  t        t        |             % ywr   r   r   s     r   r4   z_check.<locals>.<genexpr>   s     >chhs3{+>r   )r   r]   r^   rU   ry   r   rs   len)args	vars_datacurrent	availablemissingobsoletes         r   _checkr      s    '		2I&y1G)+I'!G"H7>>II=W==
 	 8??II>X>>
 	 w<#h-''r   c                     t        | j                        }t        |      }t               }||k(  ryt	        ||| j
                        }t        | j                  |       y)Nr   )r   r]   r^   rU   r   r   r   )r   r   r   r   new_vars_datas        r   _updater      sP    '		2I&y1G)+I)"9iDMDII}5r   c                     t        dt        j                        } | j                         }|j	                  dd      }|j                  dd       |j                  t               |j	                  d	d
      }|j                  dd       |j                  ddd       |j                  t               | j                         }|j                  |      S )NzWindows agent version updater)descriptionformatter_classri   zCheck for version updates)helpr]   z'Variable file with Windows lookup table)funcupdatezUpdate lookup tablez--cachez$Directory used for caching downloadsz/tmp)r   default)r   argparseArgumentDefaultsHelpFormatterr   
add_parseradd_argumentset_defaultsr   r   
parse_argsr   )parserr    ri   r   r   s        r   mainr      s    3 >>F &&(J!!'0K!LE	v$MN	F#""82G"HF
%NO
>   W%D99T?r   __main__)!
__future__r   r   r   r*   __metaclass__r   rC   rp   r{   r}   r   urllibr   	xml.etreer   r   r;   rw   rv   rI   ArgumentParserr   rU   r^   r   r   r   r   r   r   r"   r    r   r   <module>r      s    A @      
  !  DE G  ''  >.b"
!
((. zCHHTV r   