def test_site_apps(self): """Test that apps are only available inside their sites""" page = Page.objects.create( title="blog", slug="blog", static_path=False, language_code="en", is_active=True, application="blog", site=Site.objects.create(host="testserver2"), ) a = Article.objects.create(title="article", category="blog") # No urlconf. self.assertRaises(NoReverseMatch, a.get_absolute_url) # No apps on this site with set_current_site(self.test_site): self.assertEqual(apps_urlconf(), "testapp.urls") # Apps on this site with set_current_site(page.site): self.assertEqual(apps_urlconf(), "urlconf_01c07a48384868b2300536767c9879e2") try: set_urlconf("urlconf_01c07a48384868b2300536767c9879e2") self.assertEqual(a.get_absolute_url(), "/blog/%s/" % a.pk) finally: set_urlconf(None)
def _get_absolute_url(): try: site = current_site() if site == self.section.site: return reverse_app( ( f"{site.id}-blog-{self.namespace.name}-{self.category}", f"{site.id}-blog-{self.namespace.name}", f"{site.id}-blog-{self.category}", f"{site.id}-blog", ), "article-detail", kwargs={"slug": self.slug}, languages=[self.language_code], ) with set_current_site(self.section.site): site = self.section.site return ("//" + self.section.site.host + reverse_app( [ f'{site.id}-blog-{self.namespace.name}-{self.category or ""}', f"{site.id}-blog-{self.namespace.name}", f'{site.id}-blog-{self.category or ""}', f"{site.id}-blog", ], "article-detail", urlconf=apps_urlconf(), kwargs={"slug": self.slug}, languages=[self.language_code], )) except NoReverseMatch: return "#"
def get_absolute_url(self): site = current_site() if self.section.site == site: return reverse_app( (f"{self.section.site_id}-people", ), "team-detail", kwargs={"pk": self.pk}, ) with set_current_site(self.section.site): return ("//" + self.section.site.host + reverse_app( [f"{self.section.site.id}-people"], "team-detail", urlconf=apps_urlconf(), kwargs={"pk": self.pk}, ))
def ical_event(self): with set_current_site(self.section.site): start = self.start_date.strftime("%Y%m%dT%H%M00") end = self.end_date.strftime("%Y%m%dT%H%M00") timestamp = now().strftime("%Y%m%dT%H%M00") return ( "BEGIN:VEVENT\r\n" f"UID:{self.uuid}\r\n" f"DTSTAMP:{timestamp}Z\r\n" f"SUMMARY:{self.title}\r\n" f"DTSTART:{start}Z\r\n" f"DTEND:{end}Z\r\n" f"DESCRIPTION:https://{self.section.site.host}{self.get_absolute_url()}\r\n" f"LOCATION:{self.get_address()}\r\n" "END:VEVENT\r\n")
def get_absolute_url(self): try: site = current_site() if not self.section or site == self.section.site: return reverse_app([f"{site.pk}-events"], "location-detail", kwargs={"slug": self.slug}) with set_current_site(self.section.site): return ("//" + self.section.site.host + reverse_app( [f"{self.section.site.id}-events"], "location-detail", urlconf=apps_urlconf(), kwargs={"slug": self.slug}, )) except NoReverseMatch: return "#"
def _get_absolute_url(): try: site = current_site() if site == self.section.site: return reverse_app( [ f"{site.id}-events-{self.category}", f"{site.id}-events", ], "event-detail", urlconf=apps_urlconf(), kwargs={ "slug": self.slug, "day": self.start_date.day, "month": self.start_date.month, "year": self.start_date.year, }, languages=[self.language_code], ) with set_current_site(self.section.site): return ("//" + self.section.site.host + reverse_app( [ f"{self.section.site.id}-events-{self.category}", f"{self.section.site.id}-events", ], "event-detail", urlconf=apps_urlconf(), kwargs={ "slug": self.slug, "day": self.start_date.day, "month": self.start_date.month, "year": self.start_date.year, }, languages=[self.language_code], )) except NoReverseMatch: return "#"
def test_apps(self): """Article app test (two instance namespaces, two languages)""" home_de = Page.objects.create( title="home", slug="home", path="/de/", static_path=True, language_code="de", is_active=True, menu="main", site=self.test_site, ) home_en = Page.objects.create( title="home", slug="home", path="/en/", static_path=True, language_code="en", is_active=True, menu="main", site=self.test_site, ) for root in (home_de, home_en): for app in ("blog", "publications"): Page.objects.create( title=app, slug=app, static_path=False, language_code=root.language_code, is_active=True, application=app, parent_id=root.pk, site=self.test_site, ) for i in range(7): for category in ("publications", "blog"): Article.objects.create(title="%s %s" % (category, i), category=category) self.assertContains(self.client.get("/de/blog/all/"), 'class="article"', 7) self.assertContains(self.client.get("/de/blog/?page=2"), 'class="article"', 2) self.assertContains( self.client.get("/de/blog/?page=42"), 'class="article"', 2, # Last page with instances (2nd) ) self.assertContains( self.client.get("/de/blog/?page=invalid"), 'class="article"', 5, # First page ) response = self.client.get("/de/blog/") self.assertContains(response, 'class="article"', 5) response = self.client.get("/en/publications/") self.assertContains(response, 'class="article"', 5) with set_current_site(self.test_site): set_urlconf(apps_urlconf()) try: article = Article.objects.order_by("pk").first() with override("de"): self.assertEqual(article.get_absolute_url(), "/de/publications/%s/" % article.pk) with override("en"): self.assertEqual(article.get_absolute_url(), "/en/publications/%s/" % article.pk) finally: set_urlconf(None) response = self.client.get("/de/publications/%s/" % article.pk) self.assertContains(response, "<h1>publications 0</h1>", 1) # The exact value of course does not matter, just the fact that the # value does not change all the time. with set_current_site(self.test_site): self.assertEqual(apps_urlconf(), "urlconf_fe9552a8363ece1f7fcf4970bf575a47") p = Page.objects.create( title="new", slug="new", path="/bla/", static_path=True, language_code="en", is_active=True, application="blog", site=Site.objects.create(host="testserver3"), ) with set_current_site(self.test_site): self.assertEqual(apps_urlconf(), "urlconf_fe9552a8363ece1f7fcf4970bf575a47") p.site = self.test_site p.save() with set_current_site(self.test_site): self.assertEqual(apps_urlconf(), "urlconf_0ca4c18b8aca69acfe121a9cbbdbd00e")