def set_subsciteit(): # the r parameter gets added by javascript for POST requests so we # can reference c.site in api.py sr_name = request.environ.get("subsciteit", request.POST.get("r")) domain = request.environ.get("domain") can_stale = request.method.upper() in ("GET", "HEAD") default_sr = DefaultSR() c.site = default_sr if not sr_name: # check for cnames sub_domain = request.environ.get("sub_domain") if sub_domain and not sub_domain.endswith(g.media_domain): c.site = Subsciteit._by_domain(sub_domain) or default_sr elif sr_name == "r": # sciteits c.site = Sub elif "+" in sr_name: sr_names = sr_name.split("+") srs = set(Subsciteit._by_name(sr_names, stale=can_stale).values()) if All in srs: c.site = All elif Friends in srs: c.site = Friends else: srs = [sr for sr in srs if not isinstance(sr, FakeSubsciteit)] if len(srs) == 0: c.site = MultiSciteit([], sr_name) elif len(srs) == 1: c.site = srs.pop() else: sr_ids = [sr._id for sr in srs] c.site = MultiSciteit(sr_ids, sr_name) else: try: c.site = Subsciteit._by_name(sr_name, stale=can_stale) except NotFound: sr_name = chksrname(sr_name) if sr_name: redirect_to("/sciteits/search?q=%s" % sr_name) elif not c.error_page and not request.path.startswith("/api/login/"): abort(404) # if we didn't find a subsciteit, check for a domain listing if not sr_name and isinstance(c.site, DefaultSR) and domain: c.site = DomainSR(domain) if isinstance(c.site, FakeSubsciteit): c.default_sr = True