
    Zi95              	       V   d dl Z d dl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 dl
mZ d dlmZ d dlmZmZ  ed          Z ej        d	          Zd
gZ G d de          ZddedededefdZd Zd Z	 ddefdZdefdZdefdZdefdZ defdZ!dedee j                  fdZ"dS )    N)Optional)parser)relativedelta)utils)	FlagValue)convert_to_datetime_awareis_valid_regexl   posthogis_notc                       e Zd ZdS )InconclusiveMatchErrorN)__name__
__module____qualname__     P/root/projects/butler/venv/lib/python3.11/site-packages/posthog/feature_flags.pyr   r      s        Dr   r    keydistinct_idsaltreturnc                     |  d| | }t          t          j        |                    d                                                    d d         d          }|t
          z  S )N.zutf-8      )inthashlibsha1encode	hexdigest__LONG_SCALE__)r   r   r   hash_keyhash_vals        r   _hashr%      s_    +++T++H7< 8 899CCEEcrcJBOOHn$$r   c                     t          | d         |d          }t          |           D ]$}||d         k    r||d         k     r
|d         c S %d S )Nr   variant)r   	value_min	value_max)r%   variant_lookup_table)flagr   
hash_valuer'   s       r   get_matching_variantr-   #   sf    tE{Ki@@@J'-- " "---*w{?S2S2S5>!!!4r   c                     g }d}|                      d          pi                      d          pi                      d          pg }|D ]1}||d         dz  z   }|                    |||d         d           |}2|S )	Nr   filtersmultivariatevariantsrollout_percentaged   r   )r(   r)   r   )getappend)feature_flaglookup_tabler(   multivariatesr'   r)   s         r   r*   r*   +   s    LI"&&y117R<<^LLRPRWW  	  !  (< = CC	#)GENSS	
 	
 	
 		r   c                    |                      d          pi                      d          pg }d}|pi }|                      d          pi                      d          pi                      d          pg }d |D             }t          |d           }|D ]\}		 t          | ||	||          r4|	                     d	          }
|
r|
|v r|
}nt          | |          }|pd
c S K# t          $ r d
}Y Yw xY w|rt	          d          dS )Nr/   groupsFr0   r1   c                     g | ]
}|d          S r   r   ).0r'   s     r   
<listcomp>z1match_feature_flag_properties.<locals>.<listcomp>D   s    FFFW'%.FFFr   c                 4    |                      d          rdndS )Nr'   r      )r4   )	conditions    r   <lambda>z/match_feature_flag_properties.<locals>.<lambda>J   s    9==#;#;Baa r   r<   r'   TzGCan't determine if feature flag is enabled or not with given properties)r4   sortedis_condition_matchr-   r   )r+   r   
propertiescohort_propertiesflag_conditionsis_inconclusiveflag_variantsvalid_variant_keyssorted_flag_conditionsrA   variant_overrider'   s               r   match_feature_flag_propertiesrM   :   s    xx	**0b55h??E2OO)/Rhhy))/R44^DDJOO  	  GFFFF $BB  
 , # #		# "k9j:K  ' $-==#;#; # F(8<N(N(N.GG24EEG$&&&' & 	# 	# 	#"OOO	#  
$U
 
 	
 5s   ACC.-C.c                 ~   |                     d          }t          |                     d          pg           dk    r^|                     d          D ]D}|                     d          }|dk    rt          |||          }nt          ||          }|s dS E|dS |t	          | d         |          |d	z  k    rdS dS )
Nr2   rE   r   typecohortFTr   r3   )r4   lenmatch_cohortmatch_propertyr%   )	r6   r   rA   rE   rF   r2   propproperty_typematchess	            r   rD   rD   g   s     #';<<
9==&&,"--11MM,// 	 	D HHV,,M((&tZ9JKK(z:: uu %4%%U0C[*Q*QS + + u4r   c                    |                      d          }|                      d          pd}|                      d          }||vrt          d          |dk    rt          d          ||         }|t          vr|dS |d	v r"d
 }|dk    r |||          S  |||           S |dk    r||v S |dk    rt          j        ||          S |dk    rt          j        ||           S |dk    r_t          t          |                    oBt          j        t          |                    	                    t          |                    d uS |dk    r_t          t          |                    oBt          j        t          |                    	                    t          |                    d u S |dv rd }d }	 t          |          }n# t          $ r Y nw xY w|>|<t          |t                    r ||t          |          |          S  ||||          S  |t          |          t          |          |          S |dv r	 t          t          |                    }	|	s0t          j        t          |                    }	t!          |	          }	n"# t          $ r}
t          d          |
d }
~
ww xY w|	st          d          t          |t"          j                  r!t!          |          }|dk    r||	k     S ||	k    S t          |t"          j                  r6|dk    r||	                                k     S ||	                                k    S t          |t                    rS	 t          j        |          }t!          |          }|dk    r||	k     S ||	k    S # t          $ r t          d          w xY wt          d          t          d|           )Nr   operatorexactvaluez5can't match properties without a given property value
is_not_setz/can't match properties with operator is_not_setF)rY   r   c                     t          | t                    r-t          |                                          d | D             v S t	          j        | |          S )Nc                 P    g | ]#}t          |                                          $S r   )strcasefold)r=   vals     r   r>   z?match_property.<locals>.compute_exact_match.<locals>.<listcomp>   s7     : : :,/CHH%%'': : :r   )
isinstancelistr^   r_   r   str_iequals)rZ   override_values     r   compute_exact_matchz+match_property.<locals>.compute_exact_match   sf    %&& >**3355 : :38: : :   $UN;;;r   is_set	icontainsnot_icontainsregex	not_regex)gtgteltltec                     |dk    r| |k    S |dk    r| |k    S |dk    r| |k     S |dk    r| |k    S t          d|           )Nrk   rl   rm   rn   zInvalid operator: )
ValueError)lhsrhsrX   s      r   comparezmatch_property.<locals>.compare   sm    4Sy U""cz!T!!Sy U""cz! !@h!@!@AAAr   )is_date_beforeis_date_afterz.The date set on the flag is not a valid formatrt   z'The date provided is not a valid formatz1The date provided must be a string or date objectzUnknown operator )r4   r   NONE_VALUES_ALLOWED_OPERATORSr   str_icontainsr	   r^   recompilesearchfloat	Exceptionra   -relative_date_parse_for_feature_flag_matchingr   parser   datetimedate)propertyproperty_valuesr   rX   rZ   rd   re   rs   parsed_valueparsed_dateeoverride_dates               r   rS   rS      s    ,,u

C||J''27HLL!!E
/!!$C
 
 	
 <$%VWWW$S)N555>;Qu&&&	< 	< 	< w&&un===**5.AAAA8o%%;">5999?""&~u====73u::&& O
3u::&&--c..A.ABB$N	

 ;3u::&& K
3u::&&--c..A.ABBdJ	

 ---
	B 
	B 
	B 	 <<LL 	 	 	D	 #(B.#.. Gw~s5zz8DDDw~|XFFF73~..E

HEEE666		GE

SSK E$l3u::667DD 	 	 	(@ 	
  	(@   nh&788 	5nEEM+++${22${2266 	+++%(8(8(:(:::%(8(8(:(:::,, 	X &^ < < 9- H H///(;66(;66 X X X,-VWWWX )C  
 !!?X!?!?
@
@@s=   :G
 

GGAJ 
J5 J00J5*.N N N9c                     t          |                     d                    }||vrt          d          ||         }t          |||          S )NrZ   8can't match cohort without a given cohort property value)r^   r4   r   match_property_group)r   r   rF   	cohort_idproperty_groups        r   rR   rR     s]     HLL))**I)))$F
 
 	
 'y1NARSSSr   c                 (   | sdS |                      d          }|                      d          }|rt          |          dk    rdS d}d|d         v rx|D ]^}	 t          |||          }|dk    r|s dS n|r dS &# t          $ r,}t                              d| d|            d}Y d }~Wd }~ww xY w|rt          d	          |dk    S |D ]}	 |                     d          d
k    rt          |||          }nt          ||          }|                     dd          }	|dk    r|s|	s dS |r|	r dS n|r|	s dS |s|	r dS x# t          $ r,}t                              d| d|            d}Y d }~d }~ww xY w|rt          d          |dk    S )NTrO   valuesr   FANDzFailed to compute property z
 locally: z8Can't match cohort without a given cohort property valuerP   negationr   )r4   rQ   r   r   logdebugrR   rS   )
r   r   rF   property_group_typerE   error_matching_locallyrT   rV   r   r   s
             r   r   r     s    t(,,V44##H--J ZA--t":a=   	. 	.D..t_FWXX&%//" %$uu%  $#tt) . . .		KKKKKLLL)-&&&&&&. " 	(J   #e++  	. 	.D.88F##x//*4BSTTGG,T?CCG88J66&%//" %8 %$uu %8 %$uu  $x $#tt" $x $#tt) . . .		KKKKKLLL)-&&&&&&. " 	(J  
 #e++sI   A:3A::
B0"B++B0AE-E4E<E
E:"E55E:rZ   c                    d}t          j        ||           }t          j                            t          j        j                  }|rt          |                    d                    }|dk    rd S |                    d          }|dk    r|t          |          z
  }nj|dk    r|t          |          z
  }nP|d	k    r|t          |
          z
  }n6|dk    r|t          |          z
  }n|dk    r|t          |          z
  }nd S |S d S )Nz)^-?(?P<number>[0-9]+)(?P<interval>[a-z])$numberi'  intervalh)hoursd)daysw)weeksm)monthsy)years)	rx   rz   r   nowtimezoneutcr   groupr   )rZ   ri   match	parsed_dtr   r   s         r   r}   r}   ^  s(    9EIeU##E!%%h&7&;<<I U[[**++V4;;z**s??!M$?$?$??II__!Mv$>$>$>>II__!M$?$?$??II__!M$@$@$@@II__!M$?$?$??II4tr   )r   )N)#r   r   loggingrx   typingr   dateutilr   dateutil.relativedeltar   r
   r   posthog.typesr   posthog.utilsr   r	   r{   r"   	getLoggerr   rv   r|   r   r^   r%   r-   r*   rM   boolrD   rS   rR   r   r}   r   r   r   <module>r      s#      				             0 0 0 0 0 0       # # # # # # C C C C C C C C())g	""!)
 	 	 	 	 	Y 	 	 	% %s % %C % % % % %      6:* ** * * *Z	   2@A @A @A @A @AFT$ T T T T(D,PT D, D, D, D,Nh      r   