code: def record_participation(self, client, dt=None):
          
          if dt is None:
              date = datetime.now()
          else:
              date = dt
  
          experiment_key = self.experiment.name
  
          pipe = self.redis.pipeline()
  
          pipe.sadd(_key("p:{0}:years".format(experiment_key)), date.strftime('%Y'))
          pipe.sadd(_key("p:{0}:months".format(experiment_key)), date.strftime('%Y-%m'))
          pipe.sadd(_key("p:{0}:days".format(experiment_key)), date.strftime('%Y-%m-%d'))
  
          pipe.execute()
  
          keys = [
              _key("p:{0}:_all:all".format(experiment_key)),
              _key("p:{0}:_all:{1}".format(experiment_key, date.strftime('%Y'))),
              _key("p:{0}:_all:{1}".format(experiment_key, date.strftime('%Y-%m'))),
              _key("p:{0}:_all:{1}".format(experiment_key, date.strftime('%Y-%m-%d'))),
              _key("p:{0}:{1}:all".format(experiment_key, self.name)),
              _key("p:{0}:{1}:{2}".format(experiment_key, self.name, date.strftime('%Y'))),
              _key("p:{0}:{1}:{2}".format(experiment_key, self.name, date.strftime('%Y-%m'))),
              _key("p:{0}:{1}:{2}".format(experiment_key, self.name, date.strftime('%Y-%m-%d'))),
          ]
          msetbit(keys=keys, args=([self.experiment.sequential_id(client), 1] * len(keys)))
docs: Record a user's participation in a test along with a given variation