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:
@ -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']
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user