
    Vh                         d dl mZmZmZ eZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ  G d
 de      Zy)    )absolute_importdivisionprint_functionN)AnsibleActionFail)	to_native)MutableMappingMutableSequence)
ActionBase)TemplateTemplateSyntaxError)AnsibleArgSpecValidator)DOCUMENTATIONc                   T     e Zd ZdZdZ fdZd Zd Zed        Z	d Z
d	 fd	Z xZS )
ActionModulezaction moduleFc                 V    t        t        | 
  |i | d| _        d| _        d| _        y)z
Start hereTN)superr   __init___supports_async_updates_result)selfargskwargs	__class__s      l/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/ansible/utils/plugins/action/update_fact.pyr   zActionModule.__init__   s-    lD*D;F;#    c                     t        | j                  j                  t        | j                  j                        }|j                         \  }}| j                  _        |st        |      y )N)dataschemaname)r   _taskr   r   actionvalidater   )r   aavvaliderrorss       r   _check_argspeczActionModule._check_argspec&   sT    % ""

 *-&vtzz#F++ r   c                 2   g }| j                   j                  d   D ]  }	 t        d|d   z   dz           |rt        dj                  |            y# t        $ r:}dj	                  |d   t        |            }|j                  |       Y d}~ud}~ww xY w)	zEnsure each path is jinja validupdatesz{{pathz}}zpWhile processing '{path}' found malformed path. Ensure syntax follows valid jinja format. The error was: {error})r*   errorN )	r!   r   r   r   formatr   appendr   join)r   r&   entryexcr+   s        r   _ensure_valid_jinjaz ActionModule._ensure_valid_jinja0   s    ZZ__Y/ 		%E%f-45		% #CHHV$455  ' % &eFm9S>&B	 
 e$$%s   A	B0BBc           	         t        |       }|j                  d      }g }	 	 d}|dk(  r|j                  d      }|dk(  rD|j                  d      }|dk7  r||z  }|j                  d      }|dk7  r|j                  d      }n|dvr||z  }|j                  d      }|dvr	 |j                  t        j                  |             # t
        $ r) |j                  t        j                  dd|             Y 2w xY w# t        $ r` 	 |j                  t        j                               Y |S # t
        $ r+ |j                  t        j                  dd             Y Y |S w xY ww xY w)zSplit the path into it's parts

        :param path: The user provided path
        :type path: str
        :return: the individual parts of the path
        :rtype: list
        r    .[])r5   r6   z['"])	listpopr.   astliteral_eval	Exceptionresub
IndexError)r*   quevalfieldsfields        r   _field_splitzActionModule._field_split@   s^    4jggaj	:#:''!*C#:''!*C*!ggaj * ''!*CZ/!ggaj Z/>MM#"2"25"9:% & ! >MM"&&"e"<=>  	::c..u56   :bffWb%89:	:sT   AC< 00C< "$C C< /C96C< 8C99C< <	E%$D--/E!E% E!!E%c                    |d   |dd }}|r	 ||   }| j	                  |||       yt        |t              r*|j                  |      |k7  rd| j                  d<   |||<   yyt        |t              rt        |t              sdj                  ||      }t        |      |t        |      kD  rd	j                  ||      }t        |      |t        |      k(  r!|j                  |       d| j                  d<   y||   |k7  r|||<   d| j                  d<   yyd
}t        |      # t         t        f$ r dj                  ||      }t        |      w xY w)a  Set a value

        :param obj: The object to modify
        :type obj: mutable object
        :param path: The path to where the update should be made
        :type path: list
        :param val: The new value to place at path
        :type val: string, dict, list, bool, etc
        r      Nz0Error: the key '{first}' was not found in {obj}.)objfirstTchangedzHError: {obj} is a list, but index provided was not an integer: '{first}'z9Error: {obj} not long enough for item #{first} to be set.z,update_fact can only modify mutable objects.)KeyError	TypeErrorr-   r   	set_value
isinstancer   getr   r	   intlenr.   )r   rG   r*   rA   rH   restnew_objmsgs           r   rL   zActionModule.set_valuel   s    1gtABxt-e* NN7D#.#~.775>S(.2DLL+!$CJ ) C1!%-KfEf2  ,C003s8#U\\# ] C ,C00CH$JJsO.2DLL+5zS(%(E
26Y/ ) E',,E i( -KRR S  (,,-s   D% %.Ec                    d| j                   _        t        t        |   ||      | _        d| j
                  d<   | j                          t               }| j                          | j                   j                  d   D ]  }| j                  |d         }|d   |dd }}|j                  |       ||d   vrd	j                  |
      }t        |      |d   j                  |      }	|r| j                  |	||d          |d   |   |d   k7  s|d   |d   |<   d| j
                  d<    |D ]%  }
|d   j                  |
      }|| j
                  |
<   ' | j
                  S )zaction entry pointFrI   r)   r*   r   rF   Nvarsz+'{obj}' was not found in the current facts.)rG   valueT)r!   diffr   r   runr   r'   setr2   r   rD   addr-   r   rN   rL   )r   tmp	task_varsresultsr0   partsrG   r*   rS   	retrievedkeyrV   r   s               r   rX   zActionModule.run   sm   

\44S)D"'Y%  "ZZ__Y/ 	3E%%eFm4Ea%)CKK)F++CJJsJS',,!&)--c2Iy$g?V$S)U7^;-27^If%c*.2DLL+	3  	&Cf%))#.E %DLL	& ||r   )NN)__name__
__module____qualname____doc___requires_connectionr   r'   r2   staticmethodrD   rL   rX   __classcell__)r   s   @r   r   r      s@     ,6  ) )V0-d r   r   )
__future__r   r   r   type__metaclass__r:   r=   ansible.errorsr   ansible.module_utils._textr   /ansible.module_utils.common._collections_compatr   r	   ansible.plugins.actionr
   jinja2r   r   Nansible_collections.ansible.utils.plugins.module_utils.common.argspec_validater   =ansible_collections.ansible.utils.plugins.modules.update_factr   r    r   r   <module>rs      sC    A @  
 	 , 0 [ - 0 X^: ^r   