7

Use the Segment Adapter for retrieving page visits

This fixes the last occurence of directly accessing the session in the
codebase
This commit is contained in:
Michael van Tellingen
2017-05-31 14:14:54 +02:00
parent 31f8a329f2
commit 9705947d3f
2 changed files with 13 additions and 15 deletions

View File

@ -144,6 +144,15 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
'count': 1, '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): def update_visit_count(self):
"""Update the visit count for all segments in the request session.""" """Update the visit count for all segments in the request session."""
segments = self.request.session['segments'] segments = self.request.session['segments']

View File

@ -226,23 +226,12 @@ class VisitCountRule(AbstractBaseRule):
operator = self.operator operator = self.operator
segment_count = self.count segment_count = self.count
def get_visit_count(request): # Local import for cyclic import
"""Search through the request sessions to get the page visit count from wagtail_personalisation.adapters import get_segment_adapter
corresponding to the request.
:param request: The http request adapter = get_segment_adapter(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)
visit_count = adapter.get_visit_count()
if visit_count and operator == "more_than": if visit_count and operator == "more_than":
if visit_count > segment_count: if visit_count > segment_count:
return True return True