2424from  requests .auth  import  HTTPBasicAuth 
2525import  urllib3 
2626
27- __version__  =  '4.11.1' 
28- VERSION  =  __version__   # TODO: remove when bumping major version. 
27+ from  typing  import  Optional 
2928
30- logger  =  logging .getLogger (__name__ )
29+ from  .flags .local_feature_flags  import  LocalFeatureFlagsProvider 
30+ from  .flags .remote_feature_flags  import  RemoteFeatureFlagsProvider 
31+ from  .flags .types  import  LocalFlagsConfig , RemoteFlagsConfig 
32+ 
33+ __version__  =  '5.0.0b1' 
3134
35+ logger  =  logging .getLogger (__name__ )
3236
3337class  DatetimeSerializer (json .JSONEncoder ):
3438    def  default (self , obj ):
@@ -44,7 +48,7 @@ def json_dumps(data, cls=None):
4448    return  json .dumps (data , separators = (',' , ':' ), cls = cls )
4549
4650
47- class  Mixpanel (object ):
51+ class  Mixpanel ():
4852    """Instances of Mixpanel are used for all events and profile updates. 
4953
5054    :param str token: your project's Mixpanel token 
@@ -59,17 +63,40 @@ class Mixpanel(object):
5963        The *serializer* parameter. 
6064    """ 
6165
62-     def  __init__ (self , token , consumer = None , serializer = DatetimeSerializer ):
66+     def  __init__ (self , token , consumer = None , serializer = DatetimeSerializer ,  local_flags_config :  Optional [ LocalFlagsConfig ]  =   None ,  remote_flags_config :  Optional [ RemoteFlagsConfig ]  =   None ):
6367        self ._token  =  token 
6468        self ._consumer  =  consumer  or  Consumer ()
6569        self ._serializer  =  serializer 
6670
71+         self ._local_flags_provider  =  None 
72+         self ._remote_flags_provider  =  None 
73+ 
74+         if  local_flags_config :
75+             self ._local_flags_provider  =  LocalFeatureFlagsProvider (self ._token , local_flags_config , __version__ , self .track )
76+ 
77+         if  remote_flags_config :
78+             self ._remote_flags_provider  =  RemoteFeatureFlagsProvider (self ._token , remote_flags_config , __version__ , self .track )
79+ 
6780    def  _now (self ):
6881        return  time .time ()
6982
7083    def  _make_insert_id (self ):
7184        return  uuid .uuid4 ().hex 
7285
86+     @property  
87+     def  local_flags (self ) ->  LocalFeatureFlagsProvider :
88+         """Get the local flags provider if configured for it""" 
89+         if  self ._local_flags_provider  is  None :
90+             raise  MixpanelException ("No local flags provider initialized. Pass local_flags_config to constructor." )
91+         return  self ._local_flags_provider 
92+ 
93+     @property  
94+     def  remote_flags (self ) ->  RemoteFeatureFlagsProvider :
95+         """Get the remote flags provider if configured for it""" 
96+         if  self ._remote_flags_provider  is  None :
97+             raise  MixpanelException ("No remote_flags_config was passed to the consttructor" )
98+         return  self ._remote_flags_provider 
99+ 
73100    def  track (self , distinct_id , event_name , properties = None , meta = None ):
74101        """Record an event. 
75102
@@ -504,6 +531,24 @@ def group_update(self, message, meta=None):
504531            record .update (meta )
505532        self ._consumer .send ('groups' , json_dumps (record , cls = self ._serializer ))
506533
534+     def  __enter__ (self ):
535+         return  self 
536+ 
537+     def  __exit__ (self , exc_type , exc_val , exc_tb ):
538+         if  self ._local_flags_provider  is  not None :
539+             self ._local_flags_provider .__exit__ (exc_type , exc_val , exc_tb )
540+         if  self ._remote_flags_provider  is  not None :
541+             self ._remote_flags_provider .__exit__ (exc_type , exc_val , exc_tb )
542+ 
543+     async  def  __aenter__ (self ):
544+         return  self 
545+ 
546+     async  def  __aexit__ (self , exc_type , exc_val , exc_tb ):
547+         if  self ._local_flags_provider  is  not None :
548+             await  self ._local_flags_provider .__aexit__ (exc_type , exc_val , exc_tb )
549+         if  self ._remote_flags_provider  is  not None :
550+             await  self ._remote_flags_provider .__aexit__ (exc_type , exc_val , exc_tb )
551+ 
507552
508553class  MixpanelException (Exception ):
509554    """Raised by consumers when unable to send messages. 
@@ -733,3 +778,4 @@ def _flush_endpoint(self, endpoint):
733778                raise  mp_e  from  orig_e 
734779            buf  =  buf [self ._max_size :]
735780        self ._buffers [endpoint ] =  buf 
781+ 
0 commit comments