def set_multireddit(): routes_dict = request.environ["pylons.routes_dict"] if "multipath" in routes_dict: multipath = routes_dict["multipath"].lower() multi_id = None if c.user_is_loggedin and routes_dict.get("my_multi"): multi_id = "/user/%s/m/%s" % (c.user.name.lower(), multipath) elif "username" in routes_dict: username = routes_dict["username"].lower() if c.user_is_loggedin: # redirect /user/foo/m/... to /me/m/... for user foo. if username == c.user.name.lower(): # trim off multi id url_parts = request.path_qs.split("/")[5:] url_parts.insert(0, "/me/m/%s" % multipath) abort(302, location="/".join(url_parts)) multi_id = "/user/%s/m/%s" % (username, multipath) if multi_id: try: c.site = LabeledMulti._byID(multi_id) except tdb_cassandra.NotFound: abort(404)
def for_user(cls, account): """Return a new AccountSRPrefs obj populated with user's data.""" prefs = cls() multis = LabeledMulti.by_owner(account) multi_srs = set(chain.from_iterable(multi.srs for multi in multis)) feedback = AccountSRFeedback.for_user(account) # subscriptions and srs in the user's multis become likes subscriptions = Subreddit.user_subreddits(account, limit=None) prefs.likes.update(utils.to36(sr_id) for sr_id in subscriptions) prefs.likes.update(sr._id36 for sr in multi_srs) # recent clicks on explore tab items are also treated as likes prefs.likes.update(feedback[CLICK]) # dismissed recommendations become dislikes prefs.dislikes.update(feedback[DISMISS]) # dislikes take precedence over likes prefs.likes = prefs.likes.difference(prefs.dislikes) # recently recommended items won't be shown again right away prefs.recent_views.update(feedback[VIEW]) return prefs