
    Vh2                     ,   d dl mZmZmZ eZ	 d dlZd dlmZ dZd dl
mZ d dlmZ 	 d dlmZ dZd dlZd	d
gZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZefdZd Z  G d de!      Z"d Z#e$dk(  r e#        yy# e	$ r dZY kw xY w# e	$ r dZY cw xY w)    )absolute_importdivisionprint_functionN)
exceptionsTF)env_fallback)	to_native)AnsibleActionFaildenyanyc                 R    t        | d   t              xs t        | d   t              S Nr   )
isinstancedictlist)xs    l/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/cisco/meraki/plugins/plugin_utils/meraki.pyis_list_complexr      s#    adD!;Z!d%;;    c                 \     t               t        |      k7  ryt         fd|D              S )z9Checks if there are different elements between two lists.Tc              3   &   K   | ]  }|v 
 y wN ).0elemls1s     r   	<genexpr>z has_diff_elem.<locals>.<genexpr>'   s     /4t3/s   )lenr   )r   ls2s   ` r   has_diff_elemr   #   s'    
3x3s8/3///r   c                 :   | D ]  }||v s| |   ||   }}t        |t              r=t        |j                               r$|j                         |j                         k7  s] yt        |t              rt        ||      s| yt        |      t        |      k7  s y y)z8Compares two dictionaries considering the defined rules.TF)r   strhave_to_change_to_lowercaselowerr   r   )dict1dict2keyval1val2s        r   compare_dictsr)   *   s      %<sU3Z$D$$)DTZZ\)R::<4::</D$' t,t9D	)  r   c                     t        |       t        |      k7  ryt        |      D ]X  \  }}t        |t              r't        | |   t              s yt	        | |   |      s; yt        | |         t        |      k7  sX y y)zICompares two lists, with dictionaries inside them, to detect differences.TF)r   	enumerater   r   r)   r!   )r   r   ir   s       r   has_diff_elem2r-   <   sv    
3x3s8S> 
4dD!c!fd+SVT* 3q6{c$i'
 r   c                     | t         v S r   )lowercase_change_words)attrs    r   r"   r"   P   s    )))r   c                 Z    d}| D ]#  }|d   j                         dk(  r| |=  | S |dz   }% | S )Nr   commentzdefault rule   )r#   )lsindexr   s      r   delete_default_ruler6   T   sL    E 	?  "n45	I 		
 Ir   c                 X   t        |       }t        |      }||k7  ry|dk(  ry| |k(  }|ryt        |       s"t        |      st        |       t        |      k(  S d}||kD  r|S t        | d   t              rt        | |       xs t        ||        S t        | |       xs t        ||        S )NFr   Td   )r   r   setr   r   r-   r   )list1list2	len_list1	len_list2attempt_std_cmpMAX_SIZE_CMPs         r   compare_listr@   ^   s    E
IE
IIA~unO5!/%*@5zSZ'' L< eAh%&ue45[nUTY>Z9[[%eU34Y]5RW=X8YYr   c                 V    t        |j                  |       |j                  |             S r   )meraki_compare_equalityget)kr$   r%   s      r   fn_comp_keyrE   {   s    "599Q<1>>r   c                 L    y yyt         t              rYt        t              rIt         j                               t        j                               z   }t	         fd|D               S t         t              rt        t              rt               S  k(  S )NTFc              3   :   K   | ]  }t        |         y wr   rE   r   paramcurrent_valuerequested_values     r   r   z*meraki_compare_equality.<locals>.<genexpr>        lSXK}oNNl   r   r   r   keysr   r@   rK   rL   all_dict_paramss   `` r   rB   rB      s    &-&:ot+L}1134%%'()l\klmmm	M4	(Z-NM?;;//r   c                 F    y yt         t              rYt        t              rIt         j                               t        j                               z   }t	         fd|D               S t         t              rt        t              rt               S  k(  S )NTc              3   :   K   | ]  }t        |         y wr   rH   rI   s     r   r   z+meraki_compare_equality2.<locals>.<genexpr>   rM   rN   rO   rQ   s   `` r   meraki_compare_equality2rU      s    -&:ot+L}1134%%'()l\klmmm	M4	(Z-NM?;;//r   c                     | |k(  S r   r   )obj1obj2s     r   
simple_cmprY      s    4<r   c                    t        | t              rt        |       dk(  rEt        | d   t              r.| d   } | j	                  |      a| j	                  |      |k7  rMd } | S d } | S | D ]>  }t        |t              s|j	                  |      |j	                  |      |k(  s:|} | c S  d } | S t        | t              sd } | S | j	                  |      | j	                  |      |k7  rd } | S )Nr3   r   )r   r   r   r   rC   )resultr&   valuecmp_fnitems        r   get_dict_resultr_      s    &$v;!&)T*::c?.6::c?e3K!F M  M  "dD)txx}/DQTY^H^!F!M" F
 M	 % M 
C	$CE)AMr   c            
      h   t        d$i dt        dt        dgfd      dt        dd      d	t        d
d      dt        dd      dt        dd      dt        dd      dt        d
d      dt        d
d      dt        dd      dt        d
d      dt        d
d      dt        dd      dt        dd      dt        dd      dt        dd      dt        dd      dt        dd      dt        dt        d gfd!      d"t        dd      d#t        dd      } | S )%Nmeraki_api_keyr!   MERAKI_DASHBOARD_API_KEYT)typefallbackrequiredmeraki_base_urlzhttps://api.meraki.com/api/v1)rc   defaultmeraki_single_request_timeoutint<   meraki_certificate_path meraki_requests_proxymeraki_wait_on_rate_limitbool meraki_nginx_429_retry_wait_time#meraki_action_batch_retry_wait_timemeraki_retry_4xx_errorF meraki_retry_4xx_error_wait_timemeraki_maximum_retries   meraki_output_logmeraki_log_pathmeraki_log_file_prefixmeraki_api_meraki_print_consolemeraki_suppress_loggingmeraki_simulatemeraki_be_geo_id	BE_GEO_ID)rc   rd   rg   !meraki_use_iterator_for_get_pagesmeraki_inherit_logging_configr   )r   r   )argument_specs    r   meraki_argument_specr      s    5628BFH  ?A
 '+r&B !%% < #r: #'FD"A *.5")E -1eR,H  $? *.5")E  $: FD9 %4   $F!" "vt<#$ !%&$ ?%& &%8'( 5;-4)246), +/FE*J-. '+&F/M2 r   c                   j    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
dd
Zd Zd ZddZd Zd Zd Zy	)MERAKIc                 b   t        dd      | _        t        rt        j                  d0i d|j                  d      d|j                  d      d|j                  d	      d
|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d |j                  d!      d"|j                  d#      d$|j                  d%      d&|j                  d'      d(d)d*|j                  d+      d,|j                  d-      | _        y | j                  d./       y )1NFrl   changedr[   api_keyra   base_urlrf   single_request_timeoutrh   certificate_pathrk   requests_proxyrm   wait_on_rate_limitrn   nginx_429_retry_wait_timerp   action_batch_retry_wait_timerq   retry_4xx_errorrr   retry_4xx_error_wait_timers   maximum_retriesrt   
output_logrv   log_pathrw   log_file_prefixrx   print_consolerz   suppress_loggingr{   simulater|   	be_geo_idr}   callerz$MerakiAnsibleCollection/2.21.2 Ciscouse_iterator_for_get_pagesr   inherit_logging_configr   z9Meraki SDK is not installed. Execute 'pip install meraki'msgr   )r   r[   MERAKI_SDK_IS_INSTALLEDmerakiDashboardAPIrC   api	fail_json)selfparamss     r   __init__zMERAKI.__init__   s   54"** 

#34$56 (.zz3(5
 "(,E!F  &zz*AB $*::.I#J +1**6+8 .4ZZ9.; !'

+C D +1**6+8 !'

+C D  "::&9:!"  $56#$ !'

+C D%& %jj)?@'( "(,E!F)*  $56+, !**%78-. >/0 ,2::7,914 (.zz3(55DH@ NNO  Qr   c                 "    d| j                   d<   y )NTr   r[   r   s    r   r   zMERAKI.changed   s    !%Ir   c                 B    | j                          d| j                  d<   y )NzObject createdr[   r   r   s    r   object_createdzMERAKI.object_created       0Hr   c                 B    | j                          d| j                  d<   y )NzObject updatedr[   r   r   s    r   object_updatedzMERAKI.object_updated  r   r   c                 B    | j                          d| j                  d<   y )NzObject deletedr[   r   r   s    r   object_deletedzMERAKI.object_deleted  r   r   c                 "    d| j                   d<   y )NzObject already absentr[   r   r   s    r   object_already_absentzMERAKI.object_already_absent  s     7Hr   c                 "    d| j                   d<   y )NzObject already presentr[   r   r   s    r   object_already_presentzMERAKI.object_already_present  s     8Hr   c                 "    d| j                   d<   y )NzDObject already present, but it has different values to the requestedr[   r   r   s    r   object_present_and_differentz#MERAKI.object_present_and_different  s     fHr   Nc                 L    ||| j                   d<   |r| j                          y y )Nr[   )r[   r   )r   r   r[   s      r   object_modify_resultzMERAKI.object_modify_result  s'    $*DKK!LLN r   c                 @    t         j                  j                  |      S r   )ospathisfiler   	file_paths     r   is_filezMERAKI.is_file  s    ww~~i((r   c                 @    t         j                  j                  |      S r   )r   r   basenamer   s     r   extract_file_namezMERAKI.extract_file_name!  s    ww	**r   c                    	 t        | j                  |      }t        ||      }	 |r|j	                  dg       }|rt        |t              ri }	|D ]d  \  }
}t        |j	                  |
      t              s&| j                  ||
         s;| j                  ||
         }||
   }|t        |d      f|	|<   f |j                  d|	       |j                  dd         di |}|S         }	 |S # t        $ r}| j                  |       Y d }~d }~ww xY w# t        j                  $ r6}| j                  dj                  t        |                   Y d }~S d }~ww xY w)	Nr   
file_pathsrbmultipart_fieldsmultipart_monitor_callbackzAAn error occurred when executing operation.The error was: {error})errorr   )getattrr   	Exceptionr   rC   r   r   r!   r   r   open
setdefaultr   APIErrorformatr   )r   familyfunctionr   op_modifieskwargsfuncefile_paths_paramsr   r&   r\   	file_namer   responses                  r   exec_merakizMERAKI.exec_meraki$  ss   	"TXXv.F68,D	$*JJ|R$@!$4Et)L')$(9 Be%fjjos;VTW[@Y(,(>(>vc{(KI(.sI )4	4+@7B,U3	B %%&8:JK%%&BDI
  >&>   6 A  	"NNqN!!	"2 "" 	NN-&y|&,	    	sB   "C. AD 5D 
AD $D .	D7DDE)+EEc                 R     | j                   j                  di | t        ||      )Nr   )r[   updater	   )r   r   r   s      r   r   zMERAKI.fail_jsonJ  s&    $V$V,,r   c                     | j                   S r   r   r   s    r   	exit_jsonzMERAKI.exit_jsonN  s    {{r   c                     |
t               S t        |t               r't        |      dk(  r
t               S |d   
t               S |S r   )r   r   r   )r   verify_interfacer   s      r   verify_arrayzMERAKI.verify_arrayQ  sG    #6M&-#$)v"*vr   )NN)NF)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sQ    %QN&11189g)+$L-	 r   r   c                       y r   r   r   r   r   mainr   ]  s    r   __main__)%
__future__r   r   r   rc   __metaclass__r   r   r   ImportErroransible.module_utils.basicr   ansible.module_utils._textr   ansible.errorsr	   ANSIBLE_ERRORS_INSTALLEDos.pathr   r/   r   r   r)   r-   r"   r6   r@   rE   rB   rU   rY   r_   r   objectr   r   r   r   r   r   <module>r      s    C B#! # 3 0$0  $  % <0$(*Z:?0$0  0: ,:B V B J	 zF i
  $#$  %$%s"   
A< B	 <BB	BB