def refresh(self): """Retrieve the request session segments and verify whether or not they still apply to the requesting visitor. """ enabled_segments = Segment.objects.enabled() rule_models = AbstractBaseRule.get_descendant_models() current_segments = self.get_segments() # Run tests on all remaining enabled segments to verify applicability. additional_segments = [] for segment in enabled_segments: if segment.is_static and segment.static_users.filter(id=self.request.user.id).exists(): additional_segments.append(segment) elif not segment.is_static or not segment.is_full: segment_rules = [] for rule_model in rule_models: segment_rules.extend(rule_model.objects.filter(segment=segment)) result = self._test_rules(segment_rules, self.request, match_any=segment.match_any) if result and segment.is_static and not segment.is_full: if self.request.user.is_authenticated(): segment.static_users.add(self.request.user) if result: additional_segments.append(segment) self.set_segments(current_segments + additional_segments) self.update_visit_count()
def get_rules(self): """Retrieve all rules in the segment.""" segment_rules = [] for rule_model in AbstractBaseRule.get_descendant_models(): segment_rules.extend( rule_model._default_manager.filter(segment=self)) return segment_rules