
    Vh                     H   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	m
Z
 d dlmZ 	 ej                  j                  Zd Zd Zd	 Zd
 Zej2                  dk  rd Znd Zd ZddZ	 ddZy# e$ r1  ej"                  d       Z G d dej&                        Z e       ZY dw xY w)    )absolute_importdivisionprint_functionN)	to_native)OpenSSLObjectErrorc                   *    e Zd Zd Zd Zd Zd Zd Zy)	_UTCClassc                     t         S N_DURATION_ZEROselfdts     n/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/crypto/plugins/module_utils/time.py	utcoffsetz_UTCClass.utcoffset       !!    c                     t         S r   r   r   s     r   dstz_UTCClass.dst    r   r   c                      yNUTC r   s     r   tznamez_UTCClass.tzname#       r   c                     |S r   r   r   s     r   fromutcz_UTCClass.fromutc&   s    Ir   c                      yr   r   )r   s    r   __repr__z_UTCClass.__repr__)   r   r   N)__name__
__module____qualname__r   r   r   r   r    r   r   r   r	   r	      s    	"	"			r   r	   c                     | r$t         j                   j                  t              S t         j                   j                         S )N)tz)datetimenowr   utcnowwith_timezones    r   get_now_datetimer+   /   s4      $$$,,##%%r   c                     | j                   t        u r| S | j                   | j                  t              S | j                  t              S Ntzinfo)r/   r   replace
astimezone	timestamps    r   ensure_utc_timezoner4   5   sG    3   ,,$$r   c                     | j                   | S | j                   t        ur| j                  t              } | j                  d       S r-   )r/   r   r1   r0   r2   s    r   remove_timezoner6   >   sF    s"((-	D))r   c                 2    |rt        |       S t        |       S r   )r4   r6   r3   r*   s     r   add_or_remove_timezoner9   G   s    *7I&=LY=Wr   )   r:   c                    t        j                   ddd| j                  t        nd       }| |z
  }	 |j                         S # t        $ r5 |j
                  |j                  |j                  dz  dz  z   dz  z   dz  cY S w xY w)Ni     r.      i  i@B )r&   r/   r   total_secondsAttributeErrormicrosecondssecondsdays)r3   epochdeltas      r   get_epoch_secondsrE   O   s    !!!Qi&6&6&Bs
 E!	&&(( 	 ""emmejj2o6L&LPU%UU 	s   A ;B ?B c                 P    | j                   t        |       } | j                         S r   )r/   r4   r3   r2   s    r   rE   rE   _   s'    #+I6I""$$r   c                     |r$t         j                   j                  | t              S t         j                   j                  |       S r   )r&   fromtimestampr   utcfromtimestampr8   s     r   from_epoch_secondsrJ   f   s5      ..y#>>--i88r   c                    t        j                  d|       }|t        |       dk(  ryt        j                  d      }|j                  d      1|t        j                  t        |j                  d                  z  }|j                  d      1|t        j                  t        |j                  d                  z  }|j                  d	      1|t        j                  t        |j                  d	            
      z  }|j                  d      1|t        j                  t        |j                  d                  z  }|j                  d      1|t        j                  t        |j                  d                  z  }|t        |      }nt        ||      }|j                  d      dk(  r||z   S ||z
  S )z\Get a datetime.datetime or None from a string in the time format described in sshd_config(5)z^(?P<prefix>[+-])((?P<weeks>\d+)[wW])?((?P<days>\d+)[dD])?((?P<hours>\d+)[hH])?((?P<minutes>\d+)[mM])?((?P<seconds>\d+)[sS]?)?$Nr<   r   weeks)rL   rB   )rB   hours)rM   minutes)rN   rA   )rA   r)   prefix+)	rematchlenr&   	timedeltagroupintr+   r9   )relative_time_stringr*   r'   parsed_resultoffsets        r   convert_relative_to_datetimerZ   l   s    HH 	KM
 $8 9Q >"F7#/($$3}/B/B7/K+LMM6".($$#m.A.A&.I*JKK7#/($$3}/B/B7/K+LMM9%1($$S1D1DY1O-PQQ9%1($$S1D1DY1O-PQQ
{];$SF8$+V|V|r   c                    t        |       }|t        d| z  |      |j                  d      s|j                  d      r+t        |||      }|dk(  r|j	                  d      S |dk(  r|S |dk(  r| S |dk(  rZd	D ]C  \  }}t        |      |k7  r	 t        j                  j                  ||      }	t        |	|
      c S  t        d| d|d      y# t        $ r Y dw xY w)zReturn an absolute timespec if a relative timespec or an ASN1 formatted
    string is provided.

    The return value will be a datetime object for the cryptography backend,
    and a ASN1 formatted string for the pyopenssl backend.Nz%The timespec "%s" for %s is not validrP   -)r*   r'   	pyopenssl%Y%m%d%H%M%SZcryptography))r^      )z%Y%m%d%H%MZ   )z%Y%m%d%H%M%S%z   )z%Y%m%d%H%M%z   r)   zThe time spec "z" for z is invalid)
r   r   
startswithrZ   strftimerS   r&   strptimer9   
ValueError)
input_string
input_namebackendr*   r'   resultresult_datetimedate_fmtlengthress
             r   get_relative_time_optionrp      s    |$F~ 3lBJ
 	
 !2!23!76-S
 k!"++O<<&""+	N	"!
 	PHf 6{f$P''00B .cOO'	P* !6BJO
 	
- 
#"  s    C	CC)FN)r_   FN)
__future__r   r   r   type__metaclass__r&   rQ   sys+ansible.module_utils.common.text.convertersr   Fansible_collections.community.crypto.plugins.module_utils.crypto.basicr   timezoneutcr   r?   rT   r   r/   r	   r+   r4   r6   r9   version_inforE   rJ   rZ   rp   r   r   r   <module>rz      s    A @   	 
 A





C.&%* f %9 H PT1
m  'X''*NHOO   +C's   A+ +3B! B!