コード例 #1
0
    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()
コード例 #2
0
 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