Source code for recommends.converters

from collections import defaultdict
from django.apps import apps


[docs]def model_path(obj): return '%s.%s' % (obj._meta.app_label, obj._meta.object_name.lower())
[docs]class IdentifierManager(object): _sites = None _ctypes = None @property def sites(self): if self._sites is None: from django.contrib.sites.models import Site self._sites = dict([(s.id, s) for s in Site.objects.all()]) return self._sites @property def ctypes(self): if self._ctypes is None: from django.contrib.contenttypes.models import ContentType self._ctypes = dict([("%s.%s" % (c.app_label, c.model), c) for c in ContentType.objects.all()]) return self._ctypes
[docs] def resolve_identifier(self, identifier): """ The opposite of ``get_identifier()`` """ app_module, site_id, object_id = identifier.split(':') app_label, model = app_module.split('.') site = self.sites[int(site_id)] ModelClass = apps.get_model(app_label, model) model = ModelClass.objects.get(pk=object_id) return model, site
[docs] def identifier_to_dict(self, identifier, score=None, related=False): """ The opposite of ``get_identifier()`` """ app_module, site_id, object_id = identifier.split(':') ctype = self.ctypes[app_module] if related: spec = { 'related_object_ctype': ctype.id, 'related_object_id': int(object_id), 'related_object_site': int(site_id) } else: spec = { 'object_ctype': ctype.id, 'object_id': int(object_id), 'object_site': int(site_id) } if score is not None: spec['score'] = score return spec
[docs] def get_identifier(self, obj, site_id): """ Given a Django Model, returns a string identifier in the format <app_label>.<model>:<site_id>:<object_id>. """ return "%s:%s:%s" % (model_path(obj), site_id, obj.id)
[docs]def convert_vote_list_to_userprefs(vote_list): """ Return a user-centerd prefernce matrix. ``vote_list must be`` composed of (user_id, object_identifier, rating) ``object_identifier`` is any string that uniquely identifies the object ie: <app_label>.<model>:<object_id>. The ``utils.get_identifier`` method is provided as convenience for creating such identifiers. """ prefs = defaultdict(dict) for pref in vote_list: prefs[pref[0]][pref[1]] = pref[2] return prefs
[docs]def convert_vote_list_to_itemprefs(vote_list): """ Return a item-centerd prefernce matrix. ``vote_list must be`` composed of (user_id, object_identifier, rating) ``object_identifier`` is any string that uniquely identifies the object ie: <app_label>.<model>:<object_id>. The ``utils.get_identifier`` method is provided as convenience for creating such identifiers. """ prefs = defaultdict(dict) for pref in vote_list: prefs[pref[1]][pref[0]] = pref[2] return prefs
[docs]def similary_results_to_itemMatch(qs, provider): itemMatch = defaultdict(list) for i in qs: site = i.related_object_site item = provider.get_identifier(i.get_object(), site) similarity = i.score item2 = provider.get_identifier(i.get_related_object(), site) itemMatch[item].append((similarity, item2)) return itemMatch