Skip to content

Commit 500a714

Browse files
committed
Merge pull request django-cms#2933 from digi604/fix-2931
allow placeholder with or statement to fail silently
2 parents ab6e078 + 6a4e815 commit 500a714

File tree

7 files changed

+58
-11
lines changed

7 files changed

+58
-11
lines changed

cms/api.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,18 @@ def _verify_apphook(apphook, namespace):
7575
"""
7676
apphook_pool.discover_apps()
7777
if hasattr(apphook, '__module__') and issubclass(apphook, CMSApp):
78-
assert apphook in apphook_pool.apps.values()
78+
try:
79+
assert apphook in apphook_pool.apps.values()
80+
except AssertionError:
81+
print(apphook_pool.apps.values())
82+
raise
7983
return apphook.__name__
8084
elif isinstance(apphook, string_types):
81-
apphook_pool.discover_apps()
82-
assert apphook in apphook_pool.apps
85+
try:
86+
assert apphook in apphook_pool.apps
87+
except AssertionError:
88+
print(apphook_pool.apps.values())
89+
raise
8390
apphook_name = apphook
8491
else:
8592
raise TypeError("apphook must be string or CMSApp instance")

cms/templatetags/cms_tags.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -307,10 +307,17 @@ def render_tag(self, context, name, extra_bits, nodelist=None):
307307
if not page or page == 'dummy':
308308
if nodelist:
309309
return nodelist.render(context)
310-
311310
return ''
312-
313-
content = get_placeholder_content(context, request, page, name, inherit, nodelist)
311+
try:
312+
content = get_placeholder_content(context, request, page, name, inherit, nodelist)
313+
except PlaceholderNotFound:
314+
if nodelist:
315+
return nodelist.render(context)
316+
raise
317+
if not content:
318+
if nodelist:
319+
return nodelist.render(context)
320+
return ''
314321
return content
315322

316323
def get_name(self):

cms/test_utils/project/sampleapp/templates/sampleapp/home.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ <h3>{{ message }}</h3>
2424
</ul>
2525
<h4>Sample image - appmedia works?</h4>
2626
<img src="{{ STATIC_URL }}sampleapp/img/gift.jpg" alt="gift">
27+
{% placeholder "test" or %}<--noplaceholder-->{% endplaceholder %}
2728
{% endblock content %}

cms/tests/apphooks.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def tearDown(self):
3838
del sys.modules[APP_MODULE]
3939

4040
self.reload_urls()
41+
apphook_pool.clear()
4142

4243
def reload_urls(self):
4344
from django.conf import settings
@@ -137,7 +138,7 @@ def test_apphook_on_root(self):
137138
with force_language("en"):
138139
response = self.client.get(self.get_pages_root())
139140
self.assertTemplateUsed(response, 'sampleapp/home.html')
140-
141+
self.assertContains(response, '<--noplaceholder-->')
141142
response = self.client.get('/en/blankapp/')
142143
self.assertTemplateUsed(response, 'nav_playground.html')
143144

@@ -437,6 +438,7 @@ def tearDown(self):
437438

438439
if APP_MODULE in sys.modules:
439440
del sys.modules[APP_MODULE]
441+
apphook_pool.clear()
440442

441443
def reload_urls(self):
442444
from django.conf import settings

cms/tests/frontend.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# -*- coding: utf-8 -*-
22
import sys
33
import datetime
4+
from cms.apphook_pool import apphook_pool
5+
from cms.exceptions import AppAlreadyRegistered
46
from cms.test_utils.project.placeholderapp.models import Example1
57
from django.core.urlresolvers import clear_url_caches
68
from cms.appresolver import clear_app_resolvers
@@ -179,9 +181,14 @@ def test_toolbar_login_view(self):
179181
char_1='char_1', char_2='char_1', char_3='char_3', char_4='char_4',
180182
date_field=datetime.datetime.now()
181183
)
184+
try:
185+
apphook_pool.register(Example1App)
186+
except AppAlreadyRegistered:
187+
pass
188+
self.reload_urls()
182189
create_page('apphook', 'simple.html', 'en', published=True,
183190
apphook=Example1App)
184-
self.reload_urls()
191+
185192

186193
url = '%s/%s/?edit' % (self.live_server_url, 'apphook/detail/%s' % ex1.pk)
187194
self.driver.get(url)
@@ -195,15 +202,18 @@ def test_toolbar_login_view(self):
195202

196203
def test_toolbar_login_cbv(self):
197204
User = get_user_model()
205+
try:
206+
apphook_pool.register(Example1App)
207+
except AppAlreadyRegistered:
208+
pass
209+
self.reload_urls()
198210
create_page('Home', 'simple.html', 'en', published=True)
199211
ex1 = Example1.objects.create(
200212
char_1='char_1', char_2='char_1', char_3='char_3', char_4='char_4',
201213
date_field=datetime.datetime.now()
202214
)
203215
create_page('apphook', 'simple.html', 'en', published=True,
204216
apphook=Example1App)
205-
self.reload_urls()
206-
207217
url = '%s/%s/?edit' % (self.live_server_url, 'apphook/detail/class/%s' % ex1.pk)
208218
self.driver.get(url)
209219
username_input = self.driver.find_element_by_id("id_cms-username")

cms/tests/plugins.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import datetime
44
import json
55
from cms.test_utils.util.fuzzy_int import FuzzyInt
6+
from django.core.cache import cache
67
import os
78

89
from djangocms_googlemap.models import GoogleMap
@@ -568,6 +569,7 @@ def test_inheritplugin_media(self):
568569
"""
569570
Test case for InheritPagePlaceholder
570571
"""
572+
571573
inheritfrompage = api.create_page('page to inherit from',
572574
'nav_playground.html',
573575
'en')
@@ -604,9 +606,10 @@ def test_inheritplugin_media(self):
604606
page.publish('en')
605607

606608
self.client.logout()
609+
cache.clear()
607610
response = self.client.get(page.get_absolute_url())
608611
self.assertTrue(
609-
'https://maps-api-ssl.google.com/maps/api/js?v=3&amp;sensor=true' in response.content.decode('utf8'))
612+
'https://maps-api-ssl.google.com/maps/api/js?v=3&sensor=true' in response.content.decode('utf8').replace("&amp;", "&"))
610613

611614
def test_inherit_plugin_with_empty_plugin(self):
612615
inheritfrompage = api.create_page('page to inherit from',

cms/tests/templatetags.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,20 @@ def test_render_plugin(self):
323323
with self.assertNumQueries(0):
324324
output = template.render(context)
325325
self.assertIn('<b>Test</b>', output)
326+
327+
def test_render_placeholder_with_no_page(self):
328+
page = create_page('Test', 'col_two.html', 'en', published=True)
329+
template = Template(
330+
"{% load cms_tags %}{% placeholder test or %}< --- empty --->{% endplaceholder %}")
331+
request = RequestFactory().get('/asdadsaasd/')
332+
user = self.get_superuser()
333+
request.user = user
334+
request.current_page = page
335+
request.session = {}
336+
request.toolbar = CMSToolbar(request)
337+
request.toolbar.edit_mode = True
338+
request.toolbar.is_staff = True
339+
context = RequestContext(request)
340+
with self.assertNumQueries(4):
341+
template.render(context)
342+

0 commit comments

Comments
 (0)