
    Ki95              	       b   S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJrJr  \" S5      r\R&                  " S	5      rS
/r " S S\5      rSS\S\S\S\4S jjrS rS r SS\4S jjrS\4S jrS\4S jrS\4S jr S\4S jr!S\S\\ R                      4S jr"g)    N)Optional)parser)relativedelta)utils)	FlagValue)convert_to_datetime_awareis_valid_regexl   posthogis_notc                       \ rS rSrSrg)InconclusiveMatchError    N)__name__
__module____qualname____firstlineno____static_attributes__r       W/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/posthog/feature_flags.pyr   r      s    r   r   keydistinct_idsaltreturnc                     U  SU U 3n[        [        R                  " UR                  S5      5      R	                  5       S S S5      nU[
        -  $ )N.zutf-8      )inthashlibsha1encode	hexdigest__LONG_SCALE__)r   r   r   hash_keyhash_vals        r   _hashr'      sO    a}TF+H7<< 89CCEcrJBOHn$$r   c                 v    [        U S   USS9n[        U 5       H  nX#S   :  d  M  X#S   :  d  M  US   s  $    g )Nr   variant)r   	value_min	value_max)r'   variant_lookup_table)flagr   
hash_valuer)   s       r   get_matching_variantr/   #   sG    tE{Ki@J'---*{?S2S5>! . r   c                     / nSnU R                  S5      =(       d    0 R                  S5      =(       d    0 R                  S5      =(       d    / nU H&  nX$S   S-  -   nUR                  X%US   S.5        UnM(     U$ )	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7R<<^LRPRWW 	  !(< = CC	#GENS	
 	 ! r   c                 P   U R                  S5      =(       d    0 R                  S5      =(       d    / nSnU=(       d    0 nU R                  S5      =(       d    0 R                  S5      =(       d    0 R                  S5      =(       d    / nU Vs/ s H  owS   PM	     nn[        US S9n	U	 HN  n
 [        XXU5      (       a8  U
R                  S	5      nU(       a  X;   a  UnO[        X5      nU=(       d    S
s  $ MP     U(       a  [	        S5      egs  snf ! [         a    S
n My  f = f)Nr1   groupsFr2   r3   r   c                 6    U R                  S5      (       a  S$ S$ )Nr)   r      )r6   )	conditions    r   <lambda>/match_feature_flag_properties.<locals>.<lambda>J   s    9==#;#;aBBr   )r   r)   TzGCan't determine if feature flag is enabled or not with given properties)r6   sortedis_condition_matchr/   r   )r-   r   
propertiescohort_propertiesflag_conditionsis_inconclusiveflag_variantsr)   valid_variant_keyssorted_flag_conditionsr?   variant_overrides               r   match_feature_flag_propertiesrL   :   s7    xx	*0b55h?E2OO)/Rhhy)/R44^DJOO 	  9FFW%.F $B
 ,		# "9:K  $-==#; #(8(N.G24EG$&	 ,  $U
 	
 A G, & 	#"O	#s   D/ADD%$D%c                 P   UR                  S5      n[        UR                  S5      =(       d    / 5      S:  aT  UR                  S5       H;  nUR                  S5      nUS:X  a  [        XcU5      nO[        Xc5      nU(       a  M;    g   Uc  gUb  [	        U S   U5      US	-  :  a  gg)
Nr4   rD   r   typecohortFTr   r5   )r6   lenmatch_cohortmatch_propertyr'   )	r8   r   r?   rD   rE   r4   propproperty_typematchess	            r   rC   rC   g   s     #';<
9==&,"-1MM,/D HHV,M(&t9JK(:7 0 %%%U0C[*QS + r   c                    U R                  S5      nU R                  S5      =(       d    SnU R                  S5      nX!;  a  [        S5      eUS:X  a  [        S5      eX   nU[        ;  a  Uc  gUS	;   a  S
 nUS:X  a  U" XE5      $ U" XE5      (       + $ US:X  a  X!;   $ US:X  a  [        R                  " XT5      $ US:X  a  [        R                  " XT5      (       + $ US:X  aT  [        [        U5      5      =(       a9    [        R                  " [        U5      5      R                  [        U5      5      S L$ US:X  aT  [        [        U5      5      =(       a9    [        R                  " [        U5      5      R                  [        U5      5      S L $ US;   ad  S nS n [        U5      nUb4  Ub1  [        U[        5      (       a  U" U[        U5      U5      $ U" XXU5      $ U" [        U5      [        U5      U5      $ US;   Ga)   [        [        U5      5      n	U	(       d*  [        R                  " [        U5      5      n	[!        U	5      n	U	(       d  [        S5      e[        U["        R"                  5      (       a  [!        U5      nUS:X  a  X:  $ X:  $ [        U["        R$                  5      (       a*  US:X  a  XYR%                  5       :  $ XYR%                  5       :  $ [        U[        5      (       a0   [        R                  " U5      n[!        U5      nUS:X  a  X:  $ X:  $ [        S5      e[        SU 35      e! [         a     GNf = f! [         a  n
[        S5      U
eS n
A
ff = f! [         a    [        S5      ef = f)Nr   operatorexactvaluez5can't match properties without a given property value
is_not_setz/can't match properties with operator is_not_setF)rX   r   c                     [        U [        5      (       aD  [        U5      R                  5       U  Vs/ s H  n[        U5      R                  5       PM     sn;   $ [        R
                  " X5      $ s  snf N)
isinstanceliststrcasefoldr   str_iequals)rY   override_valuevals      r   compute_exact_match+match_property.<locals>.compute_exact_match   sf    %&&>*33538:38CCH%%'5:   $$U;;:s   #A0is_set	icontainsnot_icontainsregex	not_regex)gtgteltltec                 n    US:X  a  X:  $ US:X  a  X:  $ US:X  a  X:  $ US:X  a  X:*  $ [        SU 35      e)Nrk   rl   rm   rn   zInvalid operator: )
ValueError)lhsrhsrW   s      r   comparematch_property.<locals>.compare   sU    4y U"z!T!y U"z! #5hZ!@AAr   )is_date_beforeis_date_afterz.The date set on the flag is not a valid formatru   z'The date provided is not a valid formatz1The date provided must be a string or date objectzUnknown operator )r6   r   NONE_VALUES_ALLOWED_OPERATORSr   str_icontainsr	   r_   recompilesearchfloat	Exceptionr]   -relative_date_parse_for_feature_flag_matchingr   parser   datetimedate)propertyproperty_valuesr   rW   rY   rb   rd   rs   parsed_valueparsed_dateeoverride_dates               r   rR   rR      s}    ,,u
C||J'27HLL!E
!$C
 	
 <$%VWW$)N55>;Q&&	< w&u==*5AAA8%%;"">99?"&&~===73u:& O

3u:&--c..AB$N	

 ;3u:& K

3u:&--c..ABdJ	

 --
	B 	 <L #(B.#..~s5z8DD~XFF3~.E
HEE66		GE
SK$ll3u:67D (@  nh&7&7885nEM++$22$2266++%(8(8(:::%(8(8(:::,,X &^ < 9- H//(66(66 )C 
 !#4XJ!?
@@o  		$  	(@	:  X,-VWWXs=   L7 AM /*M& M& 7
MM
M#MM#&M<c                 v    [        U R                  S5      5      nX2;  a  [        S5      eX#   n[        XAU5      $ )NrY   8can't match cohort without a given cohort property value)r_   r6   r   match_property_group)r   r   rE   	cohort_idproperty_groups        r   rQ   rQ     sE     HLL)*I)$F
 	
 '1NARSSr   c                 X   U (       d  gU R                  S5      nU R                  S5      nU(       a  [        U5      S:X  a  gSnSUS   ;   aG  U H*  n [        XaU5      nUS:X  a  U(       d    gM!  U(       a    gM,     U(       a  [        S	5      eUS:H  $ U H  n UR                  S5      S
:X  a  [        XaU5      nO[        Xa5      nUR                  SS5      n	US:X  a$  U(       d	  U	(       d    gU(       a  U	(       a    gMk  Mm  U(       a	  U	(       d    gU(       d  U	(       a    gM  M     U(       a  [        S5      eUS:H  $ ! [         a)  n[        R                  SU SU 35        Sn S nAGM  S nAff = f! [         a)  n[        R                  SU SU 35        Sn S nAGM  S nAff = f)NTrN   valuesr   FANDzFailed to compute property z
 locally: z8Can't match cohort without a given cohort property valuerO   negationr   )r6   rP   r   r   logdebugrQ   rR   )
r   r   rE   property_group_typerD   error_matching_locallyrS   rU   r   r   s
             r   r   r     s   (,,V4##H-JZA-":a= D..tFWX&%/"$ # #   "(J  #e++ D.88F#x/*4BSTG,TCG88J6&%/"8$8$ $,w x#"x# (07' 2 "(J 
 #e++W * .		7vZsKL)-&.B * .		7vZsKL)-&.sI   E 0E AE6/E6E6E6 
E3
E..E36
F) F$$F)rY   c                    Sn[         R                  " X5      n[        R                  R                  [        R                  R
                  5      nU(       a  [        UR                  S5      5      nUS:  a  g UR                  S5      nUS:X  a  U[        US9-
  nU$ US:X  a  U[        US9-
  nU$ US	:X  a  U[        US
9-
  nU$ US:X  a  U[        US9-
  nU$ US:X  a  U[        US9-
  nU$ g g )Nz)^-?(?P<number>[0-9]+)(?P<interval>[a-z])$numberi'  intervalh)hoursd)daysw)weeksm)monthsy)years)	ry   r{   r   nowtimezoneutcr   groupr   )rY   ri   match	parsed_dtr   r   s         r   r~   r~   ^  s    9EIIe#E!!%%h&7&7&;&;<IU[[*+V;;z*s?!M$??I  _!Mv$>>I  _!M$??I  _!M$@@I  _!M$??I   r   ) r\   )#r   r    loggingry   typingr   dateutilr   dateutil.relativedeltar   r
   r   posthog.typesr   posthog.utilsr   r	   r|   r$   	getLoggerr   rw   r}   r   r_   r'   r/   r,   rL   boolrC   rR   rQ   r   r~   r   r   r   <module>r      s       	   0  # C()	"!)
 	Y 	%s % %C % %  6:**Z	2@A @AFT$ T(D,PT D,Nh r   