HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/croniter/__pycache__/croniter.cpython-310.pyc
o

�N�gK��
@s6ddlmZmZmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddlZddl
mZddlmZddlZddlZddlZddlZzddlmZWney[eZYnwddd	d
ddd
dddddd�Zdddd	d
ddd�ZiZeefD]Ze�e�q{[e�d�Ze�d�Z d�!e�"��Z#d�!e�"��Z$e�d�Z%e�dj&e#d�dj&e$d��Z'e�d�Z(e�d�Z)ddgZ*iZ+dd �Z,d!d"�Z-d#d$�Z.Gd%d&�d&e/�Z0Gd'd(�d(e1�Z2Gd)d*�d*e0�Z3Gd+d,�d,e3�Z4Gd-d.�d.e0�Z5Gd/d0�d0e3�Z6Gd1d2�d2e7�Z8	4	d:d5d6�Z9Gd7d8�d8�Z:ed9e:fg�Z;dS);�)�absolute_import�print_function�divisionN)�time)�
relativedelta)�tzutc)�OrderedDict���������	�
��)�jan�feb�mar�apr�may�jun�jul�aug�sep�oct�nov�dec)�sun�mon�tue�wed�thu�fri�satz^([^-]+)-([^-/]+)(/(\d+))?$z^\d+$�|z
^(\d+|\*)$z/^(?P<pre>((?P<he>(({WEEKDAYS})(-({WEEKDAYS}))?))�WEEKDAYSz3|(({MONTHS})(-({MONTHS}))?)|\w+)#)|l)(?P<last>\d+)$)�MONTHSz[*]zW^(?P<hash_type>h|r)(\((?P<range_begin>\d+)-(?P<range_end>\d+)\))?(\/(?P<divisor>\d+))?$cCs"|j|j|jddddS)N��i@B)�microseconds�seconds�days)�td�r1�E/opt/saltstack/salt/lib/python3.10/site-packages/croniter/croniter.py�timedelta_to_seconds7s�r3cCs4|jdur|jdd�|��}t|t�ddd��S)N��tzinfoi�r	)r5�replace�	utcoffsetr3�datetime)�dr1r1r2�datetime_to_timestamp<s
r:cCs(t��d}|dj}|dj}||fS)zr
    Returns the globals and locals of the calling frame.

    Is there an alternative to frame hacking here?
    r
r)�inspect�stack�	f_globals�f_locals)Zcaller_frameZ	myglobalsZmylocalsr1r1r2�_get_caller_globals_and_localsCs

r?c@�eZdZdZdS)�
CroniterErrorz+ General top-level Croniter base exception N��__name__�
__module__�__qualname__�__doc__r1r1r1r2rAO�rAc@r@)�CroniterBadTypeRangeError�.NrBr1r1r1r2rHTsrHc@r@)�CroniterBadCronErrorz@ Syntax, unknown value, or range error within a cron expression NrBr1r1r1r2rJXrGrJc@r@)�CroniterUnsupportedSyntaxErrorz= Valid cron syntax, but likely to produce inaccurate results NrBr1r1r1r2rK]srKc@r@)�CroniterBadDateErrorz* Unable to find next/prev timestamp match NrBr1r1r1r2rLerGrLc@r@)�CroniterNotAlphaErrorz; Cron syntax contains an invalid day or month abbreviation NrBr1r1r1r2rMjrGrMc@s�eZdZdZdZdZiiddie�e�e�e	�ifZ
iiddiddiddiifZdZd	Z
d
edd
dd
dfd
d�Zedd��ZdBdd�ZdCdd�ZdCdd�ZdDdd�Zedd��Zdd�Zedd��ZdEdd �ZdCd!d"�ZdCd#d$�Zd%d&�Zd'd(�ZeZZd)d*�Z d+d,�Z!d-d.�Z"d/d0�Z#d1d2�Z$e%d3d4��Z&d5d6�Z'edCd7d8��Z(edCd9d:��Z)edFd<d=��Z*edDd>d?��Z+edDd@dA��Z,d
S)G�croniterr)�r�;)r�)r	�)r	r)rrrO)rR�rR�rRrTrRrRrTrRrTrR�lrr	r)�<r+rRrrrVzCExactly 5 or 6 columns has to be specified for iterator expression.NTFc		Cs�||_||_||_|r t|ttf�std��t|t�s |�d�}|du|_|js*d}t	t
|�d�|_|dur9t�}d|_
d|_d|_d|_|j|dd�|j||d�\|_|_t||f|_||_dS)N�%hash_id must be bytes or UTF-8 string�UTF-8�2r	F��force��hash_id)�	_ret_type�_day_or�_implement_cron_bug�
isinstance�bytes�str�	TypeError�encode�%_max_years_btw_matches_explicitly_set�max�int�_max_years_between_matchesrr5�
start_time�dst_start_time�cur�set_current�expand�expanded�nth_weekday_of_month�EXPRESSIONS�expressions�_is_prev)	�self�expr_formatrj�ret_type�day_or�max_years_between_matches�is_prevr]Zimplement_cron_bugr1r1r2�__init__�s.

�
zcroniter.__init__c	Cs4z|j||WStytd�d�|����w)N�[{0}] is not acceptable� )�	ALPHACONV�KeyErrorrM�format�join)�cls�index�keyrrr1r1r2�
_alphaconv�s��zcroniter._alphaconvcCs"|j|dd�|j|p
|jdd�S)NTrZF�ry)rm�	_get_nextr^)rtrvrjr1r1r2�get_next�szcroniter.get_nextcCs|j|p|jdd�S)NTr�)r�r^�rtrvr1r1r2�get_prev�szcroniter.get_prevcCs(|p|j}t|tj�r|�|j�S|jS�N)r^�
issubclassr8�_timestamp_to_datetimerlr�r1r1r2�get_current�s
zcroniter.get_currentcCsL|s|jdur#|dur#t|tj�r|j|_|�|�}||_||_||_|jSr�)rlrar8r5�_datetime_to_timestamprjrk)rtrjr[r1r1r2rm�s
zcroniter.set_currentcC�t|�S)zI
        Converts a `datetime` object `d` into a UNIX timestamp.
        )r:)r�r9r1r1r2r��szcroniter._datetime_to_timestampcCs:tjj|t�d�jdd�}|jr|jt�d��|j�}|S)zQ
        Converts a UNIX timestamp `timestamp` into a `datetime` object.
        )�tzNr4)r8�
fromtimestamprr6r5�
astimezone)rt�	timestamp�resultr1r1r2r��szcroniter._timestamp_to_datetimecCr�)z�
        Converts a 'datetime.timedelta' object `td` into seconds contained in
        the duration.
        Note: We cannot use `timedelta.total_seconds()` because this is not
        supported by Python 2.6.
        )r3)r�r0r1r1r2�_timedelta_to_seconds�szcroniter._timedelta_to_secondscCsD|j|dd�|dur|j}||_|jdd�}|j��}|p!|j}t|ttjf�s.t	d��d}|dddkr�|dddkr�|j
r�|jrWt�
|jd�sVt�
|jd�rWn9|d}dg|d<|�|j|||�}||d<dg|d<|�|j|||�}	|s�||	kr�|n|	}
n||	kr�|n|	}
d}|s�|�|j|||�}
|�|j�}|��p�t�d�}|�|
�}
d}}|}|
r�|jr�|
��}|�|
|�d	}|�||�}d
|j}||k�r|dkr�t|�|ks�|dk�rd	t|�t|�|d	k�r|
tj|d�}|�|�}|�|�j|jk�r|}
|}
|
|_|
|_t|tj��r |
}
|
S)NTrZz;Invalid ret_type, only 'float' or 'datetime' is acceptable.Fr
r�*rr,r+�r.)rmrsrorp�copyr^r��floatr8rdr_r`�re_star�matchrr�_calcrlr�rkr7�	timedeltar5r��hour�absr�)rtrvrjryrorpZdom_dow_exception_processedZbak�t1�t2r�ZdtstarttimeZdtstarttime_utcoffsetZdtresultZlagZ	lag_hoursZdtresult_utcoffsetZhours_before_midnightZdtresult_adjustedZresult_adjustedr1r1r2r��sn

&&


��

��



zcroniter._get_nextccs<�z	d|_|�|p|j�Vqty|jrYdS�w)z�Generator of all consecutive dates. Can be used instead of
        implicit call to __iter__, whenever non-default
        'ret_type' has to be specified.
        TFN�rsr�r^rLrfr�r1r1r2�all_nextKs���zcroniter.all_nextccs<�z	d|_|�|p|j�Vqty|jrYdS�w)z Generator of all previous dates.TNr�r�r1r1r2�all_prev[s���zcroniter.all_prevcOs|jr|jp|jSr�)rsr�r�)rt�args�kwargsr1r1r2�itergsz
croniter.itercCs|Sr�r1)rtr1r1r2�__iter__jszcroniter.__iter__cs��rt�|�}�j�d}t��dks|ddkrdpd}nt�|�}�j�d}t��dkr/dp0d}��|||�}}|j|j��|j}�j	��������fdd�}	�������fdd	�}
���fd
d�}������fdd
�}���fdd�}
���fdd�}��fdd�}|	|
�r�|n||
||g}t
�|��jkr�d}|D]}||�\}}|r�|j|j��d}nq�|r�q���|j
dd��S�r�td��td��)N���rrVrr	csz�d�d�Wd|fSty��|j�d�j�}��d}�dkr2����dur2|d7}d}|dury|dkr~�rh|t|d�7}�|jd}|jdkr]��|j�dur]|d7}|t|dd	d	d
�7}n|t||dddd�7}d|fYSYd|fSYd|fSw)
Nrr�r	r
Tr)�monthsrQrP)�dayr��minute�second)r�r�r�r�r�F)r��
ValueError�month�MONTHS_IN_YEAR�is_leapr�year)r9Z
diff_monthr/Z	reset_day��DAYSroryr��nearest_diff_methodrtr�r1r2�
proc_month�s:��
�����z"croniter._calc.<locals>.proc_monthc
sz�d�d�Wd|fSty���d}�dkr(����dur(|d7}d�dvr9||jkr9d|fYS�rN��d�j}�|j�d|�}n	�|j�d|�}|dur||dkr��rl|t|dd	d	d
�7}n
|t|dddd
�7}d|fYSYd|fSYd|fSw)Nr
r�r	TrUFrrQrP�r/r�r�r�)r�r�r�r�r�r)r9r/Zdays_in_prev_month�diff_dayr�r1r2�proc_day_of_month�s>���
�����z)croniter._calc.<locals>.proc_day_of_monthc
s�z�d�d�Wd	|fStyN�|��d�dd�}|durD|dkrI�r4|t|dddd�7}n
|t|dddd�7}d|fYSYd	|fSYd	|fSw)
Nrr�rrrQrPr�TF)r�r��
isoweekdayr)r9Zdiff_day_of_week�roryr�r1r2�proc_day_of_week�s*��
�����z(croniter._calc.<locals>.proc_day_of_weekcs�d�vr#�d}tdd�D]}|�vr�|�|�q
|�|<q
�d=g}���D];\}}��|j|j|�}|D]+}|dkrC|d}n
t|�|krJq8||d}�rW||jks^�sc|j|krc|�|�q8q)|s��ry|t	|jdddd	�7}d|fS��d}	�d
kr���
��dur�|	d7}	|t	|	|jddddd	�7}d|fS|���r�|dn|d|j}
|
dkrԈr�|t	|
dddd	�7}d|fS|t	|
dddd	�7}d|fSd|fS)
Nr�rrrUr�r	rQrPr�r
TF)�range�update�items�_get_nth_weekday_of_monthr�r��lenr��appendrr��sort)r9�s�i�
candidatesZwday�nth�c�n�	candidater/r�)r�ryr�rprtr�r1r2�proc_day_of_week_nth�sf

�
�

��

������z,croniter._calc.<locals>.proc_day_of_week_nthc	s�z�d�d�Wd|fStyI�|j�dd�}|dur?|dkrD�r0|t|ddd�7}n	|t|ddd�7}d|fYSYd|fSYd|fSw)	Nr	r�r+rrP)�hoursr�r�TF)r�r�r�r)r9Z	diff_hourr�r1r2�	proc_hour�s"
�
����z!croniter._calc.<locals>.proc_hourcs�z�d�d�Wd|fStyG�|j�dd�}|dur=|dkrB�r/|t|dd�7}n|t|dd�7}d|fYSYd|fSYd|fSw)Nrr�rVrP)�minutesr�TF)r�r�r�r)r9Zdiff_minr�r1r2�proc_minutes	����z#croniter._calc.<locals>.proc_minutecs�t��dkrBz�d�d�Wd	|fStyA�|j�dd�}|dur7|dkr<|t|d�7}d|fYSYd	|fSYd	|fSw|tdd�7}d	|fS)
Nrr
r�rVrr�T)r�F)r�r�r�r�r)r9Zdiff_sec)ror�r1r2�proc_seconds ����z#croniter._calc.<locals>.proc_secondFT)�microsecondzfailed to find prev datezfailed to find next date)�math�ceil�_get_prev_nearest_diffr��floor�_get_next_nearest_diffr�r�r�r�r�rir�r6rL)rt�nowrorpry�sign�offset�dstZcurrent_yearr�r�r�r�r�r�r�Zprocs�next�proc�changedr1)r�roryr�r�rprtr�r2r�nsV
"
2

��zcroniter._calccs6�fdd�|D�}�fdd�|D�}|�|�|dS)Ncsg|]}|�kr|�qSr1r1��.0�item��xr1r2�
<listcomp>9�z.croniter._get_next_nearest.<locals>.<listcomp>csg|]}|�kr|�qSr1r1r�r�r1r2r�:r�r)�extend�rtr��to_checkZsmallZlarger1r�r2�_get_next_nearest8s
zcroniter._get_next_nearestcsF�fdd�|D�}�fdd�|D�}|��|��|�|�|dS)Ncsg|]}|�kr|�qSr1r1r�r�r1r2r�?r�z.croniter._get_prev_nearest.<locals>.<listcomp>csg|]}|�kr|�qSr1r1r�r�r1r2r�@r�r)�reverser�r�r1r�r2�_get_prev_nearest>s
zcroniter._get_prev_nearestcCsBt|�D]\}}|dkr|}||kr||Sq|d||S�NrUr)�	enumerate)rtr�r��	range_valr�r9r1r1r2r�Fs�zcroniter._get_next_nearest_diffcCs�|dd�}|��|D]}|dkr||kr||Sqd|vr$|S|d}|D]
}||kr4|}nq*||kr<|S|||Sr�)r�)rtr�r�r�r�r9r�r�r1r1r2r�Ps"��zcroniter._get_prev_nearest_diffcCsJ|dd}t�|��||�}|dddkr|�d�tdd�|D��S)z� For a given year/month return a list of days in nth-day-of-month order.
        The last weekday of the month is always [-1].
        rrrcss�|]}|dVqdS)rNr1)r�r�r1r1r2�	<genexpr>rs�z5croniter._get_nth_weekday_of_month.<locals>.<genexpr>)�calendar�Calendar�monthdayscalendar�pop�tuple)r�r�Zday_of_week�wr�r1r1r2r�is

z"croniter._get_nth_weekday_of_monthcCs,|ddks|ddkr|ddkrdSdS)Ni�rr�dTFr1)rtr�r1r1r2r�ts$zcroniter.is_leapcs�dddddddd�}|��}|durdpd	}z|||}Wn	ty'Ynw|��}t|�tvr7t|j��g}i}t|�D�]\\}	}
t�	�D]\}}||�j
||	|
|d
�}
qH|
�d�}
g}t|
�d	k�rT|
��}d�|	dkr�t�
t|��}|r�|��}|�d
d�|�dd�}}|r�|}zt|���dkr��dks�J�Wntttfy�td�|����w|r�|}|d�t�dd|j|	d	|j|	dft|��}t�|�}|s�t�dd|j|	dt|��}t�|�}|�r�|�d�|�d�|�d�p�d}}}|	dk�r|dk�rd}t�|��sd�|�|	||��}t�|��s.d�|�|	||��}|�rE|�rEt|�t|�k�sEt�t|���sY|	dk�rR|dk�rRd}ntd�|���tt|||g�\}}}t||�t|j|	d	|j|	d�k�r�td�|���z
t||d|�}Wnt�y�}ztd�|���d}~ww|
|	dk�r���r��dk�r��fd d!�|D�n|7}
n�|� d"��r�td#�|���t!�|��s�|�|	||�}zt|�}Wn
t�y�Ynw||j"|	v�r|	d$v�r�t|�dk�s|	d%v�rt|�d&k�s|j"|	|}|d'v�r0t|�|j|	d	k�s)t|�|j|	dk�r0td(�|���|�#|�|	dk�rN��rN||v�rGt$�||<||�%��t|
�d	ksft$|�}t&|d)d*�d+�}t|�|j'|	k�r�|	dk�rvd,|dv�s�|	dk�r�d,|dv�r�nd,g}|�#t|�dk�r�|d	d,k�r�d,gn|�q?|�r�t$|d�}|�(|�)��}|�*d,�|�r�tt$|d��|j'dk�r�t+d-�|||���|t,||f<||fS).N)�	0 0 * * *zh h(0-2) * * * h)z	0 * * * *zh * * * * h)r�zh h * * * h)z	0 0 * * 0zh h * * h h)z	0 0 1 * *zh h h * * h)z	0 0 1 1 *zh h h h * h)z	@midnightz@hourlyz@dailyz@weeklyz@monthlyz@yearlyz	@annuallyr	rr\�,r�he��lastr
z:[{0}] is not acceptable.  Invalid day_of_week value: '{1}'Zprez
^\*(\/.+)$z%d-%d\1z^(.+)\/(.+)$z\1-%d/\2r
rUZ31�{0}�0�7r{z{0} is out of bandszinvalid range: {0}csg|]}d�|���qS)z{0}#{1})rr��r�r1r2r��r�z$croniter._expand.<locals>.<listcomp>�-z4[{0}] is not acceptable,negative numbers not allowed)r
r)rrr)r�rUz%[{0}] is not acceptable, out of rangecSst|t�r
d�|�S|S)Nz{:02})rarhr)r�r1r1r2�<lambda>r�z"croniter._expand.<locals>.<lambda>)r�r�ztday-of-week field does not support mixing literal values and nth day of week syntax.  Cron: '{}'    dow={} vs nth={})-�lowerr~�splitr��VALID_LEN_EXPRESSIONrJ�
bad_lengthr��	EXPANDERSr�rnr��special_dow_rer�rc�	groupdict�getrhr��AssertionErrorr�re�sub�RANGES�step_search_re�search�group�only_int_rer��maprgr��
startswith�star_or_int_re�LOWMAPr��set�add�sorted�
LEN_MEANS_ALL�
difference�keys�discardrKrq)r�rur]Zexpr_aliases�eflZhash_id_exprrrrorpr��exprZ
expanderidZexpanderZe_list�res�eZspecial_dow_rem�gr�r��t�m�low�high�step�rng�excZdow_expanded_setr1r�r2�_expandzs0�
�

����
��
&����*��������
��


�t��
"
�zcroniter._expandc

Cs�z|j||d�WStfy?}z*t��\}}}t|t�r�ttjd�dkr4t�	�}t
�\}}	t|��td�|���d}~ww)zBShallow non Croniter ValueError inside a nice CroniterBadCronErrorr\rrr�N)
r(r��sys�exc_inforarArh�version�
_traceback�
format_excr?rJr)
r�rur]r'Z
error_typeZerror_instance�	tracebackZtraceZglobsZlocsr1r1r2rn1s

��zcroniter.expandrXcCsX|rt|ttf�s
td��t|t�s|�|�}z
|j||d�WdSty+YdSw)NrWr\FT)rarbrcrdrernrA)r�Z
expressionr]�encodingr1r1r2�is_validAs

��zcroniter.is_validcCs|�||||�Sr�)�match_range)r��cron_expressionZtestdaterwr1r1r2r�Oszcroniter.matchcCs�|||tj|d�}|�tj�tdd�}}|js||}|j|dd�|��|��}}	t|j�dkr5dnd}
||��|
}t	||	�t
||	���|kS)N)rvrwr	�r-TrZrrV)r8r�rr�rmr�r�ro�
total_secondsrg�min)r�r2Z
from_datetimeZto_datetimerw�cronr0�ms1ZtdpZtdtZprecision_in_secondsZduration_in_secondr1r1r2r1Sszcroniter.match_range)NNr�)T)NNN)NrX)-rCrDrEr�rr�r��deepcopy�M_ALPHAS�
DOW_ALPHASr}rrrr�rz�classmethodr�r�r�r�rmr�r�r�r�r�r�r�r��__next__r�r�r�r�r�r��staticmethodr�r�r(rnr0r�r1r1r1r1r2rNosz�
�		
�!








	
Q
K


7
rNTFc#sv�|pt}tj}t|�t��ur*t|t���s*t�t|��s*td�t|�t�����t|ttf�r>dd�|�fD�\}�t}|durD|}|s`tdd�}|�krX||8}�|7�n||7}�|8�t	�
t�j|j��d}	|||tj||	d�}
|�kr��fdd	�}|
j
}n	�fd
d	�}|
j}z"|�}
||
�r�|tur�|
�t�Vn|
V|�}
||
�s�WdSWdSty�YdSw)a�
    Generator that provides all times from start to stop matching the given cron expression.
    If the cron expression matches either 'start' and/or 'stop', those times will be returned as
    well unless 'exclude_ends=True' is passed.

    You can think of this function as sibling to the builtin range function for datetime objects.
    Like range(start,stop,step), except that here 'step' is a cron expression.
    z1The start and stop must be same type.  {0} != {1}css(�|]}tj�|t��jdd�VqdS)Nr4)r8r�rr6)r�r!r1r1r2r�vs�&z!croniter_range.<locals>.<genexpr>Nr	r3)rvrwrxcs|�kSr�r1��v��stopr1r2�cont��zcroniter_range.<locals>.contcs|�kSr�r1r>r@r1r2rB�rC)rNr8�typerarHrr�rhrr�r�r�r�r�r�r�rL)�startrArurvrwZexclude_endsZ	_croniterZauto_rtr7Z	year_spanZicrBr%�dtr1r@r2�croniter_range`sX�
���

���rGc@s2eZdZdd�Zddd�Zd
dd�Zdd
d�ZdS)�HashExpandercCs
||_dSr�)r6)rtZcronitr1r1r2rz��
zHashExpander.__init__�hNcCs�|dv}|dur|jj|d}|r|d7}|dur"|jj|d}|dkr-t�dd�}nt�|�d@}|sB||?||d|S||?|||S)z;Return a hashed/random integer given range/hash information>rr	Nr	r�rl��)r6r�random�randint�binascii�crc32)rt�idx�	hash_typer]�	range_end�range_beginZhours_or_minutes�crcr1r1r2�do�szHashExpander.docKs
t�|�Sr�)�hash_expression_rer�)rtrrPrr]�kwr1r1r2r��rIzHashExpander.matchr�c	Ks�|dkr|j||||fi|��}|s|S|��}|ddkr&|dur&td��|dr>|dr>t|d�t|d�kr>td��|dr{|dr{|d	r{t|d	�d
krYtd�|���d�|j||d|t|d	�d
�t|d�t|d�t|d	��S|dr�|dr�t|j||d|t|d�t|d�d��S|d	r�t|d	�d
kr�td�|���d�|j||d|t|d	�d
�|jj|dt|d	��St|j||d|d��S)z>Expand a hashed/random expression to its normal representationr�rQrJNz'Hashed definitions must include hash_idrSrRz*Range end must be greater than range beginZdivisorrzBad expression: {0}z{0}-{1}/{2})rQr]rR)rQr]rRrSr	)rQr])	r�rrJrhrrUrcr6r)rtrrPrr]r�rWr"r1r1r2rn�sn
�
�

�


��	
�
���zHashExpander.expand)rJNNNr�)Nr�)rCrDrErzrUr�rnr1r1r1r2rH�s


rH�hash)NTFN)<Z
__future__rrrr.r,r�r�r
r)r;rr8Zdateutil.relativedeltarZdateutil.tzrr�rNrLZpytz�collectionsr�ImportError�dictr9r:ZALPHASr�r��compiler
rr�rr)r*rrrr�rVrrqr3r:r?r�rArdrHrJrKrLrM�objectrNrGrHrr1r1r1r2�<module>s���




��
�v
�;\
�