adds first quick adapter draft
This commit is contained in:
55
src/personalisation/adapters.py
Normal file
55
src/personalisation/adapters.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from personalisation.models import Segment
|
||||
|
||||
class BaseSegmentsAdapter(object):
|
||||
"""Base adapter with required functions predefined"""
|
||||
def __init__(self):
|
||||
return
|
||||
|
||||
def get(self):
|
||||
return
|
||||
|
||||
def add(self):
|
||||
return
|
||||
|
||||
def refresh(self):
|
||||
return
|
||||
|
||||
def check_segment_exists(self):
|
||||
return
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class SessionSegmentsAdapter(BaseSegmentsAdapter):
|
||||
"""Segments adapter that uses Django's SessionMiddleware to store segments"""
|
||||
# Setup
|
||||
def __init__(self, request):
|
||||
self.request = request
|
||||
|
||||
# Set up segments dictionary object in the session
|
||||
if 'segments' not in self.request.session:
|
||||
self.request.session['segments'] = []
|
||||
|
||||
# Get segments
|
||||
def get(self):
|
||||
return self.request.session['segments']
|
||||
|
||||
# Add segments
|
||||
def add(self, segment):
|
||||
self.request.session['segments'].append(segment)
|
||||
|
||||
def refresh(self):
|
||||
current_segments = self.request.session['segments']
|
||||
persistent_segments = Segment.objects.filter(persistent=True)
|
||||
|
||||
current_segments = [item for item in current_segments if
|
||||
any(seg.pk for seg in persistent_segments) == item['id']]
|
||||
|
||||
self.request.session['segments'] = current_segments
|
||||
|
||||
# Quick checking logic to see if a segment exists
|
||||
def check_segment_exists(self, segment):
|
||||
segments = self.request.session['segments']
|
||||
|
||||
return any(item for item in self.request.session['segments'] if segment.pk == item.id)
|
Reference in New Issue
Block a user