def test_valid_url_multisite(self): site1 = Site.objects.get_current() site3 = Site.objects.create(domain="sample3.com", name="sample3.com") home = create_page('home', 'nav_playground.html', 'de', published=True, site=site1) bar = create_page('bar', 'nav_playground.html', 'de', slug="bar", published=True, parent=home, site=site1) home_s3 = create_page('home', 'nav_playground.html', 'de', published=True, site=site3) bar_s3 = create_page('bar', 'nav_playground.html', 'de', slug="bar", published=True, parent=home_s3, site=site3) self.assertTrue(is_valid_url(bar.get_absolute_url('de'), bar)) self.assertTrue(is_valid_url(bar_s3.get_absolute_url('de'), bar_s3))
def test_slug_url_overwrite_clash(self): """ Tests if a URL-Override clashes with a normal page url """ with SettingsOverride(CMS_PERMISSION=False): home = create_page("home", "nav_playground.html", "en", published=True) bar = create_page("bar", "nav_playground.html", "en", published=False) foo = create_page("foo", "nav_playground.html", "en", published=True) # Tests to assure is_valid_url is ok on plain pages self.assertTrue(is_valid_url(bar.get_absolute_url("en"), bar)) self.assertTrue(is_valid_url(foo.get_absolute_url("en"), foo)) # Set url_overwrite for page foo title = foo.get_title_obj(language="en") title.has_url_overwrite = True title.path = "/bar/" title.save() foo.publish() try: url = is_valid_url(bar.get_absolute_url("en"), bar) except ValidationError: url = False if url: bar.published = True bar.save() bar.publish() self.assertFalse(bar.published)
def test_slug_url_overwrite_clash(self): """ Tests if a URL-Override clashes with a normal page url """ with SettingsOverride(CMS_PERMISSION=False): home = create_page('home', 'nav_playground.html', 'en', published=True) bar = create_page('bar', 'nav_playground.html', 'en', published=False) foo = create_page('foo', 'nav_playground.html', 'en', published=True) # Tests to assure is_valid_url is ok on plain pages self.assertTrue(is_valid_url(bar.get_absolute_url('en'), bar)) self.assertTrue(is_valid_url(foo.get_absolute_url('en'), foo)) # Set url_overwrite for page foo title = foo.get_title_obj(language='en') title.has_url_overwrite = True title.path = '/bar/' title.save() foo.publish() try: url = is_valid_url(bar.get_absolute_url('en'), bar) except ValidationError: url = False if url: bar.published = True bar.save() bar.publish() self.assertFalse(bar.published)
def test_slug_url_overwrite_clash(self): """ Tests if a URL-Override clashes with a normal page url """ with SettingsOverride(CMS_PERMISSION=False): create_page('home', 'nav_playground.html', 'en', published=True) bar = create_page('bar', 'nav_playground.html', 'en', published=False) foo = create_page('foo', 'nav_playground.html', 'en', published=True) # Tests to assure is_valid_url is ok on plain pages self.assertTrue(is_valid_url(bar.get_absolute_url('en'), bar)) self.assertTrue(is_valid_url(foo.get_absolute_url('en'), foo)) # Set url_overwrite for page foo title = foo.get_title_obj(language='en') title.has_url_overwrite = True title.path = '/bar/' title.save() foo.publish('en') try: url = is_valid_url(bar.get_absolute_url('en'), bar) except ValidationError: url = False if url: bar.save() bar.publish('en') self.assertFalse(bar.is_published('en'))
def clean(self): cleaned_data = self.cleaned_data slug = cleaned_data.get('slug', '') page = self.instance lang = cleaned_data.get('language', None) # No language, can not go further, but validation failed already if not lang: return cleaned_data if 'parent' not in cleaned_data: cleaned_data['parent'] = None parent = cleaned_data.get('parent', None) try: site = self.cleaned_data.get('site', Site.objects.get_current()) except Site.DoesNotExist: raise ValidationError("No site found for current settings.") if parent and parent.site != site: raise ValidationError("Site doesn't match the parent's page site") if site and not is_valid_page_slug(page, parent, lang, slug, site): self._errors['slug'] = ErrorList( [_('Another page with this slug already exists')]) del cleaned_data['slug'] if self.instance and page.title_set.count(): #Check for titles attached to the page makes sense only because #AdminFormsTests.test_clean_overwrite_url validates the form with when no page instance available #Looks like just a theoretical corner case try: title = page.get_title_obj(lang, fallback=False) except titlemodels.Title.DoesNotExist: title = None if title and not isinstance(title, titlemodels.EmptyTitle) and slug: oldslug = title.slug title.slug = slug title.save() try: is_valid_url(title.path, page) except ValidationError: exc = sys.exc_info()[0] title.slug = oldslug title.save() if 'slug' in cleaned_data: del cleaned_data['slug'] self._errors['slug'] = ErrorList(exc.messages) return cleaned_data
def clean(self): cleaned_data = self.cleaned_data slug = cleaned_data.get('slug', '') page = self.instance lang = cleaned_data.get('language', None) # No language, can not go further, but validation failed already if not lang: return cleaned_data if 'parent' not in cleaned_data: cleaned_data['parent'] = None parent = cleaned_data.get('parent', None) try: site = self.cleaned_data.get('site', Site.objects.get_current()) except Site.DoesNotExist: raise ValidationError("No site found for current settings.") if parent and parent.site != site: raise ValidationError("Site doesn't match the parent's page site") if site and not is_valid_page_slug(page, parent, lang, slug, site): self._errors['slug'] = ErrorList([_('Another page with this slug already exists')]) del cleaned_data['slug'] if self.instance and page.title_set.count(): #Check for titles attached to the page makes sense only because #AdminFormsTests.test_clean_overwrite_url validates the form with when no page instance available #Looks like just a theoretical corner case title = page.get_title_obj(lang, fallback=False) if title and not isinstance(title, EmptyTitle) and slug: oldslug = title.slug title.slug = slug title.save() try: is_valid_url(title.path, page) except ValidationError as exc: title.slug = oldslug title.save() if 'slug' in cleaned_data: del cleaned_data['slug'] if hasattr(exc, 'messages'): errors = exc.messages else: errors = [force_unicode(exc.message)] self._errors['slug'] = ErrorList(errors) return cleaned_data
def clean(self): cleaned_data = self.cleaned_data if self._errors: # Form already has errors, best to let those be # addressed first. return cleaned_data slug = cleaned_data['slug'] lang = cleaned_data['language'] parent = cleaned_data.get('parent', None) site = self.cleaned_data.get('site', Site.objects.get_current()) page = self.instance if parent and parent.site != site: raise ValidationError("Site doesn't match the parent's page site") if site and not is_valid_page_slug(page, parent, lang, slug, site): self._errors['slug'] = ErrorList( [_('Another page with this slug already exists')]) del cleaned_data['slug'] if page and page.title_set.exists(): #Check for titles attached to the page makes sense only because #AdminFormsTests.test_clean_overwrite_url validates the form with when no page instance available #Looks like just a theoretical corner case title = page.get_title_obj(lang, fallback=False) if title and not isinstance(title, EmptyTitle) and slug: oldslug = title.slug title.slug = slug title.save() try: is_valid_url(title.path, page) except ValidationError as exc: title.slug = oldslug title.save() if 'slug' in cleaned_data: del cleaned_data['slug'] if hasattr(exc, 'messages'): errors = exc.messages else: errors = [force_text(exc.message)] self._errors['slug'] = ErrorList(errors) return cleaned_data
def clean(self): cleaned_data = self.cleaned_data if self._errors: # Form already has errors, best to let those be # addressed first. return cleaned_data slug = cleaned_data['slug'] lang = cleaned_data['language'] parent = cleaned_data.get('parent', None) site = self.cleaned_data.get('site', Site.objects.get_current()) page = self.instance if parent and parent.site != site: raise ValidationError("Site doesn't match the parent's page site") if site and not is_valid_page_slug(page, parent, lang, slug, site): self._errors['slug'] = ErrorList([_('Another page with this slug already exists')]) del cleaned_data['slug'] if page and page.title_set.count(): #Check for titles attached to the page makes sense only because #AdminFormsTests.test_clean_overwrite_url validates the form with when no page instance available #Looks like just a theoretical corner case title = page.get_title_obj(lang, fallback=False) if title and not isinstance(title, EmptyTitle) and slug: oldslug = title.slug title.slug = slug title.save() try: is_valid_url(title.path, page) except ValidationError as exc: title.slug = oldslug title.save() if 'slug' in cleaned_data: del cleaned_data['slug'] if hasattr(exc, 'messages'): errors = exc.messages else: errors = [force_text(exc.message)] self._errors['slug'] = ErrorList(errors) return cleaned_data
def clean(self): cleaned_data = self.cleaned_data if 'slug' in cleaned_data.keys(): slug = cleaned_data['slug'] else: slug = "" page = self.instance lang = cleaned_data.get('language', None) # No language, can not go further, but validation failed already if not lang: return cleaned_data if 'parent' not in cleaned_data: cleaned_data['parent'] = None parent = cleaned_data.get('parent', None) try: site = self.cleaned_data.get('site', Site.objects.get_current()) except Site.DoesNotExist: site = None raise ValidationError("No site found for current settings.") if site and not is_valid_page_slug(page, parent, lang, slug, site): self._errors['slug'] = ErrorList( [_('Another page with this slug already exists')]) del cleaned_data['slug'] if self.cleaned_data['published'] and page.title_set.count(): #Check for titles attached to the page makes sense only because #AdminFormsTests.test_clean_overwrite_url validates the form with when no page instance available #Looks like just a theoretical corner case title = page.get_title_obj(lang) if title: oldslug = title.slug title.slug = self.cleaned_data['slug'] title.save() try: is_valid_url(title.path, page) except ValidationError, e: title.slug = oldslug title.save() del cleaned_data['published'] self._errors['published'] = ErrorList(e.messages)
def clean(self): cleaned_data = self.cleaned_data if 'slug' in cleaned_data.keys(): slug = cleaned_data['slug'] else: slug = "" page = self.instance lang = cleaned_data.get('language', None) # No language, can not go further, but validation failed already if not lang: return cleaned_data if 'parent' not in cleaned_data: cleaned_data['parent'] = None parent = cleaned_data.get('parent', None) try: site = self.cleaned_data.get('site', Site.objects.get_current()) except Site.DoesNotExist: site = None raise ValidationError("No site found for current settings.") if site and not is_valid_page_slug(page, parent, lang, slug, site): self._errors['slug'] = ErrorList([_('Another page with this slug already exists')]) del cleaned_data['slug'] if self.cleaned_data['published'] and page.title_set.count(): #Check for titles attached to the page makes sense only because #AdminFormsTests.test_clean_overwrite_url validates the form with when no page instance available #Looks like just a theoretical corner case title = page.get_title_obj(lang) if title: oldslug = title.slug title.slug = self.cleaned_data['slug'] title.save() try: is_valid_url(title.path,page) except ValidationError,e: title.slug = oldslug title.save() del cleaned_data['published'] self._errors['published'] = ErrorList(e.messages)
def clean_overwrite_url(self): if 'overwrite_url' in self.fields: url = self.cleaned_data['overwrite_url'] is_valid_url(url, self.instance) return url
def clean_overwrite_url(self): if 'overwrite_url' in self.fields: url = self.cleaned_data['overwrite_url'] is_valid_url(url,self.instance) # TODO: Check what happens if 'overwrite_url' is NOT in self.fields return url