diff --git a/src/wagtail_personalisation/adapters.py b/src/wagtail_personalisation/adapters.py index 3ec9c2c..2c9ce72 100644 --- a/src/wagtail_personalisation/adapters.py +++ b/src/wagtail_personalisation/adapters.py @@ -144,6 +144,15 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter): 'count': 1, }) + def get_visit_count(self, page=None): + """Return the number of visits on the current request or given page""" + path = page.path if page else self.request.path + visit_count = self.request.session.setdefault('visit_count', []) + for visit in visit_count: + if visit['path'] == path: + return visit['count'] + return 0 + def update_visit_count(self): """Update the visit count for all segments in the request session.""" segments = self.request.session['segments'] diff --git a/src/wagtail_personalisation/rules.py b/src/wagtail_personalisation/rules.py index 6df6788..9e3f0f4 100644 --- a/src/wagtail_personalisation/rules.py +++ b/src/wagtail_personalisation/rules.py @@ -226,23 +226,12 @@ class VisitCountRule(AbstractBaseRule): operator = self.operator segment_count = self.count - def get_visit_count(request): - """Search through the request sessions to get the page visit count - corresponding to the request. + # Local import for cyclic import + from wagtail_personalisation.adapters import get_segment_adapter - :param request: The http request - :type request: django.http.HttpRequest - :returns: A number indicating the amount of visits - to the requested page - :rtype: int - - """ - for page in request.session['visit_count']: - if page['path'] == request.path: - return page['count'] - - visit_count = get_visit_count(request) + adapter = get_segment_adapter(request) + visit_count = adapter.get_visit_count() if visit_count and operator == "more_than": if visit_count > segment_count: return True