
    Vh                        d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d Z
d Zd Zd	 Z G d
 dej                        Zy)    )annotationsN)to_text)Mapping)is_sequencec                <    t        | dd      xr t        | dd       S )N
__UNSAFE__F__ENCRYPTED__getattrvalues    P/home/dcms/DCMS/lib/python3.12/site-packages/ansible/module_utils/common/json.py
_is_unsafer      s#    5,.]wuoW\7]3]]    c                    t        | dd      S )Nr	   Fr
   r   s    r   	_is_vaultr      s    5/511r   c                   t        |       r dt        | j                         dd      i} | S t        |       r| D cg c]  }t	        |       } }| S t        | t              r t        d | j                         D              } | S c c}w )zRecursively preprocess a data structure converting instances of ``AnsibleUnsafe``
    into their JSON dict representations

    Used in ``AnsibleJSONEncoder.iterencode``
    __ansible_unsafesurrogate_or_strictstricterrors	nonstringc              3  <   K   | ]  \  }}|t        |      f  y w)N)_preprocess_unsafe_encode).0kvs      r   	<genexpr>z,_preprocess_unsafe_encode.<locals>.<genexpr>#   s     Q41aa2156Qs   )	r   r   _strip_unsafer   r   
isinstancer   dictitems)r   r   s     r   r   r      s     %#WU-@-@-BK`lt%uv L 
U	7<=!*1-== L 
E7	#Q5;;=QQL	 >s   Bc                <    t        j                  | t        dd      S )NT   )cls	sort_keysindent)jsondumpsAnsibleJSONEncoder)	structures    r   	json_dumpr-   (   s    ::i%74PQRRr   c                  8     e Zd ZdZd fd	Z fdZ fdZ xZS )r+   zS
    Simple encoder class to deal with JSON encoding of Ansible internal types
    c                H    || _         || _        t        t        |   di | y )N )_preprocess_unsafe_vault_to_textsuperr+   __init__)selfpreprocess_unsafevault_to_textkwargs	__class__s       r   r4   zAnsibleJSONEncoder.__init__1   s&    "3+ $0:6:r   c                   t        |dd      r7| j                  rt        |d      }|S dt        |j                  dd      i}|S t        |dd      r d	t        |j	                         dd      i}|S t        |t              rt        |      }|S t        |t        j                  t        j                  f      r|j                         }|S t        t        | 7  |      }|S )
Nr	   Fr   )r   __ansible_vaultr   r   r   r   )r   r2   r   _ciphertextr    r!   r   r"   datetimedate	isoformatr3   r+   default)r5   or   r9   s      r   r@   zAnsibleJSONEncoder.default7   s    1ou-""*?@  +GAMMJ_ks,tu  Qe,'1BK`lt)uvE  7#GE  HMM8+<+<=>KKME  ,d;A>Er   c                Z    | j                   rt        |      }t        t        |   |fi |S )zCustom iterencode, primarily design to handle encoding ``AnsibleUnsafe``
        as the ``AnsibleUnsafe`` subclasses inherit from string types and
        ``json.JSONEncoder`` does not support custom encoders for string types
        )r1   r   r3   r+   
iterencode)r5   rA   r8   r9   s      r   rC   zAnsibleJSONEncoder.iterencodeL   s0    
 "")!,A'9!FvFFr   )FF)__name__
__module____qualname____doc__r4   r@   rC   __classcell__)r9   s   @r   r+   r+   ,   s    ;*G Gr   r+   )
__future__r   r)   r=   +ansible.module_utils.common.text.convertersr   .ansible.module_utils.six.moves.collections_abcr   'ansible.module_utils.common.collectionsr   r   r   r   r-   JSONEncoderr+   r0   r   r   <module>rN      sC   
 #   ? B ?^2 S(G)) (Gr   