
    >Tf                     :   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlZd dl	m
Z
 d dlmZ d dlmZ d dlmZ de
j        j         d	e
j        j         Zd
Ze G d d                      Ze G d d                      Ze G d d                      ZddZd ZdS )    N)	dataclassfield)Optional)settings)cache)PluginConfig)datetime_from_timestampzNetBox/ zplugins-catalog-feedc                   :    e Zd ZU dZeed<   dZeed<   dZeed<   dS )PluginAuthorz=
    Identifying information for the author of a plugin.
    name org_idurlN)__name__
__module____qualname____doc__str__annotations__r   r        1/var/www/html/netbox-4.1.3/netbox/core/plugins.pyr   r      sB           IIIFCCMMMMMr   r   c                       e Zd ZU dZdZej        ed<   dZeed<   dZ	eed<   dZ
eed<   dZeed	<   dZeed
<   dZeed<   dZeed<   dZeed<   dS )PluginVersionz?
    Details for a specific versioned release of a plugin.
    Ndater   versionnetbox_min_versionnetbox_max_versionF	has_modelis_certified
is_featureis_integrationis_netboxlabs_supported)r   r   r   r   r   datetimer   r   r   r   r   r    boolr!   r"   r#   r$   r   r   r   r   r      s           #D(
"""GS        ItL$J ND   $)T)))))r   r   c                      e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed	<   d
Zee         ed<   d
Zej        ed<   d
Zej        ed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<    ee          Zeed<    ee          Zee         ed<   dZeed<   dZeed<   dZ eed<   d
S )PluginzC
    The representation of a NetBox plugin in the catalog API.
    r   idstatustitle_short
title_longtag_linedescription_shortslugNauthor
created_at
updated_atlicense_typehomepage_urlpackage_name_pypiconfig_nameFr!   )default_factoryrelease_latestrelease_recent_historyis_localis_installedinstalled_version)!r   r   r   r   r)   r   r   r*   r+   r,   r-   r.   r/   r0   r   r   r1   r%   r2   r3   r4   r5   r6   r!   r&   r   r   r8   listr9   r:   r;   r<   r   r   r   r(   r(   ,   s          BLLLFCKJHcsD#NNN%)FH\")))$(J!((($(J!(((L#L#sKL$$)E-$H$H$HNMHHH27%2M2M2MD/MMMHdL$sr   r(   c                    | pi } i }t           j        D ]Z}t          j        |          }|j        }t          |j        |j        |j        |j        |j        dd|j	                  ||j        <   [|
                                D ];\  }}|| v r-d| |         _        d| |         _        |j        | |         _        6|| |<   <| S )zO
    Return a dictionary of all locally-installed plugins, mapped by name.
    T)r6   r+   r,   r-   r.   r:   r;   r<   )r   PLUGINS	importlibimport_moduleconfigr(   r   verbose_namedescriptionr   itemsr:   r;   r<   )pluginslocal_pluginsplugin_namepluginplugin_configkvs          r   get_local_pluginsrM   G   s     mGM  ' 
 
(55&,m,2%*%2$1".+7+3	-
 	-
 	-
m()) ##%%  1<<"&GAJ&*GAJ#+,+>GAJ((GAJJNr   c                     t          j                    t          j        ri S fdfd} t	          j        t          i           }|sA	  |             }t	          j        t          |d           n# t           j        j	        $ r Y nw xY w|S )zT
    Return a dictionary of all entries in the plugins catalog, mapped by name.
    c               3     K   ddd}                      t          j        dt          it          j        d|                                           }|V  |d         d         d	         }t          d
|dz             D ]R}|| d<                        t          j        dt          it          j        d|                                           }|V  Sd S )N150)pageper_pagez
User-Agent   )headersproxiestimeoutparamsmetadata
pagination	last_page      rR   )getr   PLUGIN_CATALOG_URLUSER_AGENT_STRINGHTTP_PROXIESjsonrange)payload
first_page	num_pagesrR   	next_pagesessions        r   	get_pagesz&get_catalog_plugins.<locals>.get_pagest   s      D11[['!#45) ! 
 
 $&& 	 z*<8E	!Y]++ 		 		D"GFO+%'89 - $   dff  OOOO		 		r   c                  l   i }              D ]$}|d         D ]}g }|d         D ]p}|                     t          t          |d                   |d         |d         |d         |d         |d         |d	         |d
         |d         	  	                   qt          |d d          }t          t          |d         d                   |d         d         |d         d         |d         d         |d         d         |d         d         |d         d	         |d         d
         |d         d         	  	        }|d         r7t	          |d         d         |d         d         |d         d                   }nd }t          d#i d|d         d|d         d|d         d|d         d|d         d|d         d|d         d|dt          |d                   dt          |d                   d|d         d |d          d!|d!         d"|d"         d|d         d|d|| |d"         <   &| S )$Ndatar9   r   r   r   r   r    r!   r"   r#   r$   )	r   r   r   r   r    r!   r"   r#   r$   c                     | j         S N)r   )xs    r   <lambda>z?get_catalog_plugins.<locals>.make_plugin_dict.<locals>.<lambda>   s    !& r   T)keyreverser8   r0   r   r   r   )r   r   r   r)   r*   r+   r,   r-   r.   r/   r1   r2   r3   r4   r5   r6   r   )appendr   r	   sortedr   r(   )rF   rR   rk   releasesr   latest_releaser0   ri   s          r   make_plugin_dictz-get_catalog_plugins.<locals>.make_plugin_dict   s,   IKK =	 =	DV < < #$<=  GOO%!8!I!I$+I$6/67K/L/67K/L&-k&:)0)@'.|'<+23C+D4;<U4V
 
 
    "(0@0@$OOO!.06F1G1OPP !129='+,<'=>R'S'+,<'=>R'S"#34[A!%&6!7!G#$45lC#'(8#9:J#K,01A,BC\,]
" 
" 
" > ")!(^F3#H~h7 N51  FF "F 06 0 0 0Dzz0>>0 !%] 3 30  $L11	0
 "*--0 '++>&?&?0 f0 "60  7tL7IJJJ0  7tL7IJJJ0 "&n!5!50 "&n!5!50 '++>&?&?0 !%] 3 30 "&n!5!50  $2>!0" ,48#0]+,,U<| r   )defaulti  )
requestsSessionr   ISOLATED_DEPLOYMENTr   r^   CACHE_KEY_CATALOG_FEEDset
exceptionsRequestException)rv   catalog_pluginsri   rh   s     @@r   get_catalog_pluginsr   j   s       G # 	    0B B B B BH i 6CCCO 	..00OI,otDDDD"3 	 	 	D	 s   %A2 2B	B	rm   )r%   r@   importlib.utildataclassesr   r   typingr   rx   django.confr   django.core.cacher   netbox.pluginsr   utilities.datetimer	   RELEASEr   editionr`   r{   r   r   r(   rM   r   r   r   r   <module>r      s            ( ( ( ( ( ( ( (                    # # # # # # ' ' ' ' ' ' 6 6 6 6 6 6Sh.6SS9I9QSS /          * * * * * * * *                4       Fn n n n nr   