Beispiel #1
0
    def _set_enrollment(self, experiment, alternative, enrollment_date=None, last_seen=None):
        if experiment.name in self._enrollment_cache:
            del self._enrollment_cache[experiment.name]

        try:
            enrollment, _ = Enrollment.objects.get_or_create(
                user=self.user, experiment=experiment, defaults={"alternative": alternative}
            )
        except IntegrityError:
            # Already registered (db race condition under high load)
            return
        # Update alternative if it doesn't match
        enrollment_changed = False
        if enrollment.alternative != alternative:
            enrollment.alternative = alternative
            enrollment_changed = True
        if enrollment_date:
            enrollment.enrollment_date = enrollment_date
            enrollment_changed = True
        if last_seen:
            enrollment.last_seen = last_seen
            enrollment_changed = True

        if enrollment_changed:
            enrollment.save()

        self.experiment_counter.increment_participant_count(experiment, alternative, self._participant_identifier())

        user_enrolled.send(self, experiment=experiment.name, alternative=alternative, user=self.user, session=None)
Beispiel #2
0
    def _set_enrollment(self, experiment, alternative, enrollment_date=None, last_seen=None):
        if experiment.name in self._enrollment_cache:
            del self._enrollment_cache[experiment.name]

        try:
            enrollment, _ = Enrollment.objects.get_or_create(user=self.user, experiment=experiment, defaults={'alternative': alternative})
        except IntegrityError:
            # Already registered (db race condition under high load)
            return
        # Update alternative if it doesn't match
        enrollment_changed = False
        if enrollment.alternative != alternative:
            enrollment.alternative = alternative
            enrollment_changed = True
        if enrollment_date:
            enrollment.enrollment_date = enrollment_date
            enrollment_changed = True
        if last_seen:
            enrollment.last_seen = last_seen
            enrollment_changed = True

        if enrollment_changed:
            enrollment.save()

        self.experiment_counter.increment_participant_count(experiment, alternative, self._participant_identifier())

        user_enrolled.send(self, experiment=experiment.name, alternative=alternative, user=self.user, session=None)
Beispiel #3
0
    def _set_enrollment(self,
                        experiment,
                        alternative,
                        enrollment_date=None,
                        last_seen=None):
        enrollments = self.session.get('experiments_enrollments', {})
        enrollments[experiment.name] = (alternative, None,
                                        timestamp_from_datetime(enrollment_date
                                                                or now()),
                                        timestamp_from_datetime(last_seen))
        self.session['experiments_enrollments'] = enrollments
        if self._is_verified_human():
            self.experiment_counter.increment_participant_count(
                experiment, alternative, self._participant_identifier())
        else:
            logger.info(
                json.dumps({
                    'type': 'participant_unconfirmed',
                    'experiment': experiment.name,
                    'alternative': alternative,
                    'participant': self._participant_identifier()
                }))

        user_enrolled.send(self,
                           experiment=experiment.name,
                           alternative=alternative,
                           user=None,
                           session=self.session)
Beispiel #4
0
    def _set_enrollment(self, experiment, alternative, enrollment_date=None, last_seen=None):
        enrollments = self.session.get('experiments_enrollments', {})
        enrollments[experiment.name] = (alternative, None, timestamp_from_datetime(enrollment_date or now()), timestamp_from_datetime(last_seen))
        self.session['experiments_enrollments'] = enrollments
        if self._is_verified_human():
            self.experiment_counter.increment_participant_count(experiment, alternative, self._participant_identifier())
        else:
            logger.info(json.dumps({'type':'participant_unconfirmed', 'experiment': experiment.name, 'alternative': alternative, 'participant': self._participant_identifier()}))

        user_enrolled.send(self, experiment=experiment.name, alternative=alternative, user=None, session=self.session)
 def _set_enrollment(self, experiment, alternative, enrollment_date=None, last_seen=None):
     enrollments = self.session.get('experiments_enrollments', {})
     enrollments[experiment.name] = (alternative, None, timestamp_from_datetime(enrollment_date or now()), timestamp_from_datetime(last_seen))
     self.session['experiments_enrollments'] = enrollments
     if self._is_verified_human():
         self.experiment_counter.increment_participant_count(experiment, alternative, self._participant_identifier())
     user_enrolled.send(
         self,
         experiment=experiment.name, alternative=alternative,
         user=None, session=self.session)
Beispiel #6
0
    def _set_enrollment(self,
                        experiment,
                        alternative,
                        enrollment_date=None,
                        last_seen=None):
        if experiment.name in self._enrollment_cache:
            del self._enrollment_cache[experiment.name]

        try:
            enrollment, _ = Enrollment.objects.get_or_create(
                experiment=experiment,
                defaults={'alternative': alternative},
                **self._qs_kwargs)
        except IntegrityError:
            # Already registered (db race condition under high load)
            return
        # Update alternative if it doesn't match
        enrollment_changed = False
        if enrollment.alternative != alternative:
            enrollment.alternative = alternative
            enrollment_changed = True
        if enrollment_date:
            enrollment.enrollment_date = enrollment_date
            enrollment_changed = True
        if last_seen:
            enrollment.last_seen = last_seen
            enrollment_changed = True

        if enrollment_changed:
            enrollment.save()

        if self._is_verified_human:
            self.experiment_counter.increment_participant_count(
                experiment, alternative, self._participant_identifier())
        else:
            logger.info(
                json.dumps({
                    'type': 'participant_unconfirmed',
                    'experiment': experiment.name,
                    'alternative': alternative,
                    'participant': self._participant_identifier()
                }))

        user_enrolled.send(self,
                           experiment=experiment.name,
                           alternative=alternative,
                           user=self.user,
                           session=self.session)
Beispiel #7
0
    def _set_enrollment(self, experiment, alternative, enrollment_date=None, last_seen=None):
        enrollments = self.session.get("experiments_enrollments", {})
        enrollments[experiment.name] = (
            alternative,
            None,
            timestamp_from_datetime(enrollment_date or now()),
            timestamp_from_datetime(last_seen),
        )
        self.session["experiments_enrollments"] = enrollments
        if self._is_verified_human():
            self.experiment_counter.increment_participant_count(experiment, alternative, self._participant_identifier())
        else:
            logger.info(
                json.dumps(
                    {
                        "type": "participant_unconfirmed",
                        "experiment": experiment.name,
                        "alternative": alternative,
                        "participant": self._participant_identifier(),
                    }
                )
            )

        user_enrolled.send(self, experiment=experiment.name, alternative=alternative, user=None, session=self.session)
class AuthenticatedUser(WebUser):
    def __init__(self, user, request=None):
        self._enrollment_cache = {}
        self.user = user
        self.request = request
        super(AuthenticatedUser, self).__init__()

    def _get_enrollment(self, experiment):
        if experiment.name not in self._enrollment_cache:
            try:
                self._enrollment_cache[experiment.name] = Enrollment.objects.get(user=self.user, experiment=experiment).alternative
            except Enrollment.DoesNotExist:
                self._enrollment_cache[experiment.name] = None
        return self._enrollment_cache[experiment.name]

    def _set_enrollment(self, experiment, alternative, enrollment_date=None, last_seen=None):
        if experiment.name in self._enrollment_cache:
            del self._enrollment_cache[experiment.name]

        try:
            enrollment, _ = Enrollment.objects.get_or_create(user=self.user, experiment=experiment, defaults={'alternative': alternative})
        except IntegrityError, exc:
            # Already registered (db race condition under high load)
            return
        # Update alternative if it doesn't match
        enrollment_changed = False
        if enrollment.alternative != alternative:
            enrollment.alternative = alternative
            enrollment_changed = True
        if enrollment_date:
            enrollment.enrollment_date = enrollment_date
            enrollment_changed = True
        if last_seen:
            enrollment.last_seen = last_seen
            enrollment_changed = True

        if enrollment_changed:
            enrollment.save()

        self.experiment_counter.increment_participant_count(experiment, alternative, self._participant_identifier())

        user_enrolled.send(
            self,
            experiment=experiment.name, alternative=alternative,
            user=self.user, session=None)
 def _set_enrollment(self, experiment, alternative, enrollment_date=None, last_seen=None):
     user_enrolled.send(
         self,
         experiment=experiment.name, alternative=alternative,
         user=None, session=None)
     pass