8000 Moved placeholders from Page to Title model by Aiky30 · Pull Request #6442 · django-cms/django-cms · GitHub
[go: up one dir, main page]

Skip to content

Moved placeholders from Page to Title model #6442

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 21 commits into from
Jul 12, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8000
Prev Previous commit
Next Next commit
Continued fixing tests ensuring the placeholders are fetched properly
  • Loading branch information
Andrew Aikman authored and czpython committed Jul 11, 2018
commit 758fb2b2e44e113f3b1ef069936f3c72021c44ef
2 changes: 1 addition & 1 deletion cms/forms/wizards.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ def save(self, **kwargs):
if plugin_type in plugin_pool.plugins and plugin_body:
if content and permissions.has_plugin_permission(
self._user, plugin_type, "add"):
new_page.rescan_placeholders()
new_page.rescan_placeholders(self.language_code)
placeholder = self.get_placeholder(new_page, slot=slot)
if placeholder:
opts = {
Expand Down
17 changes: 2 additions & 15 deletions cms/models/pagemodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -1564,21 +1564,8 @@ def _publisher_can_publish(self, language):
return self.parent_page.get_public_object().is_published(language)
return False

def rescan_placeholders(self):
"""
Rescan and if necessary create placeholders in the current template.
"""
existing = OrderedDict()
placeholders = [pl.slot for pl in self.get_declared_placeholders()]

for placeholder in self.placeholders.all():
if placeholder.slot in placeholders:
existing[placeholder.slot] = placeholder

for placeholder in placeholders:
if placeholder not in existing:
existing[placeholder] = self.placeholders.create(slot=placeholder)
return existing
def rescan_placeholders(self, language):
return self.get_title_obj(language=language).rescan_placeholders()

def get_declared_placeholders(self):
# inline import to prevent circular imports
Expand Down
1 change: 1 addition & 0 deletions cms/models/placeholdermodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@ def _get_attached_field(self):
def _get_attached_model(self):
if hasattr(self, '_attached_model_cache'):
return self._attached_model_cache

if self.page or self.page_set.exists():
from cms.models import Page
self._attached_model_cache = Page
Expand Down
20 changes: 10 additions & 10 deletions cms/tests/test_alias.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def _get_example_obj(self):

def test_add_plugin_alias(self):
page_en = api.create_page("PluginOrderPage", "col_two.html", "en")
ph_en = page_en.placeholders.get(slot="col_left")
ph_en = page_en.get_placeholders("en").get(slot="col_left")
text_plugin_1 = api.add_plugin(ph_en, "TextPlugin", "en", body="I'm the first")
with self.login_user_context(self.get_superuser()):
response = self.client.post(admin_reverse('cms_create_alias'), data={'plugin_id': text_plugin_1.pk})
Expand Down Expand Up @@ -56,8 +56,8 @@ def test_alias_recursion(self):
published=True,
in_navigation=True,
)
ph_1_en = page_en.placeholders.get(slot="col_left")
ph_2_en = page_en.placeholders.get(slot="col_sidebar")
ph_1_en = page_en.get_placeholders("en").get(slot="col_left")
ph_2_en = page_en.get_placeholders("en").get(slot="col_sidebar")

api.add_plugin(ph_1_en, 'StylePlugin', 'en', tag_type='div', class_name='info')
api.add_plugin(ph_1_en, 'AliasPlugin', 'en', alias_placeholder=ph_2_en)
Expand All @@ -71,7 +71,7 @@ def test_alias_recursion(self):
def test_alias_recursion_across_pages(self):
superuser = self.get_superuser()
page_1 = api.create_page("page-1", "col_two.html", "en", published=True)
page_1_pl = page_1.placeholders.get(slot="col_left")
page_1_pl = page_1.get_placeholders("en").get(slot="col_left")
source_plugin = api.add_plugin(page_1_pl, 'StylePlugin', 'en', tag_type='div', class_name='info')
# this creates a recursive alias on the same page
alias_plugin = api.add_plugin(page_1_pl, 'AliasPlugin', 'en', plugin=source_plugin, target=source_plugin)
Expand Down Expand Up @@ -106,7 +106,7 @@ def test_alias_content_plugin_display(self):
published=False,
)
source_plugin = api.add_plugin(
source_page.placeholders.get(slot="col_left"),
source_page.get_placeholders("en").get(slot="col_left"),
'LinkPlugin',
language='en',
name='A Link',
Expand All @@ -119,7 +119,7 @@ def test_alias_content_plugin_display(self):
published=False,
)
api.add_plugin(
target_page.placeholders.get(slot="col_left"),
target_page.get_placeholders("en").get(slot="col_left"),
'AliasPlugin',
language='en',
plugin=source_plugin,
Expand Down Expand Up @@ -161,7 +161,7 @@ def test_alias_content_placeholder_display(self):
"en",
published=False,
)
source_placeholder = source_page.placeholders.get(slot="col_left")
source_placeholder = source_page.get_placeholders("en").get(slot="col_left")
api.add_plugin(
source_placeholder,
'LinkPlugin',
Expand Down Expand Up @@ -290,7 +290,7 @@ def test_alias_from_page_change_form_text(self):
published=True,
in_navigation=True,
)
source_placeholder = source_page.placeholders.get(slot="col_left")
source_placeholder = source_page.get_placeholders("en").get(slot="col_left")

api.add_plugin(
source_placeholder,
Expand Down Expand Up @@ -352,7 +352,7 @@ def test_move_and_delete_plugin_alias(self):
'''
page_en = api.create_page("PluginOrderPage", "col_two.html", "en",
slug="page1", published=True, in_navigation=True)
ph_en = page_en.placeholders.get(slot="col_left")
ph_en = page_en.get_placeholders("en").get(slot="col_left")
text_plugin_1 = api.add_plugin(ph_en, "TextPlugin", "en", body="I'm the first")
with self.login_user_context(self.get_superuser()):
#
Expand Down Expand Up @@ -398,7 +398,7 @@ def test_move_and_delete_plugin_alias(self):
def test_context_menus(self):
page_en = api.create_page("PluginOrderPage", "col_two.html", "en",
slug="page1", published=True, in_navigation=True)
ph_en = page_en.placeholders.get(slot="col_left")
ph_en = page_en.get_placeholders("en").get(slot="col_left")
context = self.get_context(page=page_en)
context['placeholder'] = ph_en
template = Template('{% load cms_tags %}{% render_extra_menu_items placeholder %}')
Expand Down
89 changes: 45 additions & 44 deletions cms/tests/test_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,8 @@ def test_timedelta_cache_plugin(self):
page1 = create_page('test page 1', 'nav_playground.html', 'en',
published=True)

placeholder1 = page1.placeholders.filter(slot="body")[0]
placeholder2 = page1.placeholders.filter(slot="right-column")[0]
placeholder1 = page1.get_placeholders("en").filter(slot="body")[0]
placeholder2 = page1.get_placeholders("en").filter(slot="right-column")[0]
plugin_pool.register_plugin(TimeDeltaCacheExpirationPlugin)
add_plugin(placeholder1, "TextPlugin", 'en', body="English")
add_plugin(placeholder2, "TextPlugin", 'en', body="Deutsch")
Expand Down Expand Up @@ -220,8 +220,8 @@ def test_datetime_cache_plugin(self):
published=True)
page1_url = page1.get_absolute_url()

placeholder1 = page1.placeholders.filter(slot="body")[0]
placeholder2 = page1.placeholders.filter(slot="right-column")[0]
placeholder1 = page1.get_placeholders("en").filter(slot="body")[0]
placeholder2 = page1.get_placeholders("en").filter(slot="right-column")[0]
try:
plugin_pool.register_plugin(DateTimeCacheExpirationPlugin)
except PluginAlreadyRegistered:
Expand Down Expand Up @@ -258,8 +258,8 @@ def TTLCacheExpirationPlugin(self):
page1 = create_page('test page 1', 'nav_playground.html', 'en',
published=True)

placeholder1 = page1.placeholders.filter(slot="body")[0]
placeholder2 = page1.placeholders.filter(slot="right-column")[0]
placeholder1 = page1.get_placeholders("en").filter(slot="body")[0]
placeholder2 = page1.get_placeholders("en").filter(slot="right-column")[0]
plugin_pool.register_plugin(TTLCacheExpirationPlugin)
add_plugin(placeholder1, "TextPlugin", 'en', body="English")
add_plugin(placeholder2, "TextPlugin", 'en', body="Deutsch")
Expand Down Expand Up @@ -298,8 +298,8 @@ def test_expiration_cache_plugins(self):
published=True)
page1_url = page1.get_absolute_url()

placeholder1 = page1.placeholders.filter(slot="body")[0]
placeholder2 = page1.placeholders.filter(slot="right-column")[0]
placeholder1 = page1.get_placeholders("en").filter(slot="body")[0]
placeholder2 = page1.get_placeholders("en").filter(slot="right-column")[0]
plugin_pool.register_plugin(TTLCacheExpirationPlugin)
try:
plugin_pool.register_plugin(DateTimeCacheExpirationPlugin)
Expand Down Expand Up @@ -364,8 +364,8 @@ def test_dual_legacy_cache_plugins(self):
published=True)
page1_url = page1.get_absolute_url()

placeholder1 = page1.placeholders.filter(slot="body")[0]
placeholder2 = page1.placeholders.filter(slot="right-column")[0]
placeholder1 = page1.get_placeholders("en").filter(slot="body")[0]
placeholder2 = page1.get_placeholders("en").filter(slot="right-column")[0]
plugin_pool.register_plugin(LegacyCachePlugin)
add_plugin(placeholder1, "TextPlugin", 'en', body="English")
add_plugin(placeholder2, "TextPlugin", 'en', body="Deutsch")
Expand Down Expand Up @@ -414,7 +414,7 @@ def test_cache_page(self):
page1_url = page1.get_absolute_url()

# Add some content
placeholder = page1.placeholders.filter(slot="body")[0]
placeholder = page1.get_placeholders("en").filter(slot="body")[0]
add_plugin(placeholder, "TextPlugin", 'en', body="English")
add_plugin(placeholder, "TextPlugin", 'de', body="Deutsch")

Expand Down Expand Up @@ -478,7 +478,7 @@ def test_no_page_cache_on_toolbar_edit(self):
page1_url = page1.get_absolute_url()

# Add some content
placeholder = page1.placeholders.filter(slot="body")[0]
placeholder = page1.get_placeholders("en").filter(slot="body")[0]
add_plugin(placeholder, "TextPlugin", 'en', body="English")
add_plugin(placeholder, "TextPlugin", 'de', body="Deutsch")

Expand Down Expand Up @@ -541,7 +541,7 @@ def test_invalidate_restart(self):
page1_url = page1.get_absolute_url()

# Add some content
placeholder = page1.placeholders.filter(slot="body")[0]
placeholder = page1.get_placeholders("en").filter(slot="body")[0]
add_plugin(placeholder, "TextPlugin", 'en', body="English")
add_plugin(placeholder, "TextPlugin", 'de', body="Deutsch")

Expand Down Expand Up @@ -575,8 +575,8 @@ def test_sekizai_plugin(self):
page1 = create_page('test page 1', 'nav_playground.html', 'en',
published=True)

placeholder1 = page1.placeholders.filter(slot="body")[0]
placeholder2 = page1.placeholders.filter(slot="right-column")[0]
placeholder1 = page1.get_placeholders("en").filter(slot="body")[0]
placeholder2 = page1.get_placeholders("en").filter(slot="right-column")[0]
plugin_pool.register_plugin(SekizaiPlugin)
add_plugin(placeholder1, "SekizaiPlugin", 'en')
add_plugin(placeholder2, "TextPlugin", 'en', body="Deutsch")
Expand Down Expand Up @@ -604,7 +604,7 @@ def test_cache_invalidation(self):
published=True)
page1_url = page1.get_absolute_url()

placeholder = page1.placeholders.get(slot="body")
placeholder = page1.get_placeholders("en").get(slot="body")
add_plugin(placeholder, "TextPlugin", 'en', body="First content")
page1.publish('en')
response = self.client.get(page1_url)
Expand Down Expand Up @@ -667,11 +667,12 @@ def setUp(self):
create_title('de', "de test page", self.page)
self.page.publish('de')

self.placeholder = self.page.placeholders.filter(slot="body")[0]
self.placeholder_en = self.page.get_placeholders("en").filter(slot="body")[0]
self.placeholder_de = self.page.get_placeholders("de").filter(slot="body")[0]
plugin_pool.register_plugin(VaryCacheOnPlugin)
add_plugin(self.placeholder, 'TextPlugin', 'en', body='English')
add_plugin(self.placeholder_en, 'TextPlugin', 'en', body='English')
add_plugin(self.placeholder, 'TextPlugin', 'de', body='Deutsch')
add_plugin(self.placeholder, 'VaryCacheOnPlugin', 'en')
add_plugin(self.placeholder_en, 'VaryCacheOnPlugin', 'en')
add_plugin(self.placeholder, 'VaryCacheOnPlugin', 'de')

self.en_request = self.get_request('/en/')
Expand All @@ -695,46 +696,46 @@ def tearDown(self):
def test_get_placeholder_cache_version_key(self):
cache_version_key = '{prefix}|placeholder_cache_version|id:{id}|lang:{lang}|site:{site}'.format(
prefix=get_cms_setting('CACHE_PREFIX'),
id=self.placeholder.pk,
id=self.placeholder_en.pk,
lang='en',
site=1,
)
self.assertEqual(
_get_placeholder_cache_version_key(self.placeholder, 'en', 1),
_get_placeholder_cache_version_key(self.placeholder_en, 'en', 1),
cache_version_key
)

def test_set_clear_get_placeholder_cache_version(self):
initial, _ = _get_placeholder_cache_version(self.placeholder, 'en', 1)
clear_placeholder_cache(self.placeholder, 'en', 1)
version, _ = _get_placeholder_cache_version(self.placeholder, 'en', 1)
initial, _ = _get_placeholder_cache_version(self.placeholder_en, 'en', 1)
clear_placeholder_cache(self.placeholder_en, 'en', 1)
version, _ = _get_placeholder_cache_version(self.placeholder_en, 'en', 1)
self.assertGreater(version, initial)

def test_get_placeholder_cache_key(self):
version, vary_on_list = _get_placeholder_cache_version(self.placeholder, 'en', 1)
version, vary_on_list = _get_placeholder_cache_version(self.placeholder_en, 'en', 1)
desired_key = '{prefix}|render_placeholder|id:{id}|lang:{lang}|site:{site}|tz:{tz}|v:{version}|country-code:{cc}'.format( # noqa
prefix=get_cms_setting('CACHE_PREFIX'),
id=self.placeholder.pk,
id=self.placeholder_en.pk,
lang='en',
site=1,
tz=get_timezone_name(),
version=version,
cc='_',
)
_set_placeholder_cache_version(self.placeholder, 'en', 1, version, vary_on_list=vary_on_list, duration=1)
actual_key = _get_placeholder_cache_key(self.placeholder, 'en', 1, self.en_request)
_set_placeholder_cache_version(self.placeholder_en, 'en', 1, version, vary_on_list=vary_on_list, duration=1)
actual_key = _get_placeholder_cache_key(self.placeholder_en, 'en', 1, self.en_request)
self.assertEqual(actual_key, desired_key)

en_key = _get_placeholder_cache_key(self.placeholder, 'en', 1, self.en_request)
de_key = _get_placeholder_cache_key(self.placeholder, 'de', 1, self.de_request)
en_key = _get_placeholder_cache_key(self.placeholder_en, 'en', 1, self.en_request)
de_key = _get_placeholder_cache_key(self.placeholder_de, 'de', 1, self.de_request)
self.assertNotEqual(en_key, de_key)

en_us_key = _get_placeholder_cache_key(self.placeholder, 'en', 1, self.en_us_request)
en_us_key = _get_placeholder_cache_key(self.placeholder_en, 'en', 1, self.en_us_request)
self.assertNotEqual(en_key, en_us_key)

desired_key = '{prefix}|render_placeholder|id:{id}|lang:{lang}|site:{site}|tz:{tz}|v:{version}|country-code:{cc}'.format( # noqa
prefix=get_cms_setting('CACHE_PREFIX'),
id=self.placeholder.pk,
id=self.placeholder_en.pk,
lang='en',
site=1,
tz=get_timezone_name(),
Expand All @@ -758,34 +759,34 @@ def test_set_get_placeholder_cache(self):
'request': self.en_uk_request,
})

en_content = en_renderer.render_placeholder(self.placeholder, en_context, 'en', width=350)
en_us_content = en_us_renderer.render_placeholder(self.placeholder, en_us_context, 'en', width=350)
en_uk_content = en_uk_renderer.render_placeholder(self.placeholder, en_uk_context, 'en', width=350)
en_content = en_renderer.render_placeholder(self.placeholder_en, en_context, 'en', width=350)
en_us_content = en_us_renderer.render_placeholder(self.placeholder_en, en_us_context, 'en', width=350)
en_uk_content = en_uk_renderer.render_placeholder(self.placeholder_en, en_uk_context, 'en', width=350)

del self.placeholder._plugins_cache

de_renderer = self.get_content_renderer(self.de_request)
de_context = Context({
'request': self.de_request,
})
de_content = de_renderer.render_placeholder(self.placeholder, de_context, 'de', width=350)
de_content = de_renderer.render_placeholder(self.placeholder_de, de_context, 'de', width=350)

self.assertNotEqual(en_content, de_content)

set_placeholder_cache(self.placeholder, 'en', 1, en_content, self.en_request)
cached_en_content = get_placeholder_cache(self.placeholder, 'en', 1, self.en_request)
cached_en_content = get_placeholder_cache(self.placeholder_en, 'en', 1, self.en_request)
self.assertEqual(cached_en_content, en_content)

set_placeholder_cache(self.placeholder, 'de', 1, de_content, self.de_request)
cached_de_content = get_placeholder_cache(self.placeholder, 'de', 1, self.de_request)
cached_de_content = get_placeholder_cache(self.placeholder_de, 'de', 1, self.de_request)
self.assertNotEqual(cached_en_content, cached_de_content)

set_placeholder_cache(self.placeholder, 'en', 1, en_us_content, self.en_us_request)
cached_en_us_content = get_placeholder_cache(self.placeholder, 'en', 1, self.en_us_request)
cached_en_us_content = get_placeholder_cache(self.placeholder_en, 'en', 1, self.en_us_request)
self.assertNotEqual(cached_en_content, cached_en_us_content)

set_placeholder_cache(self.placeholder, 'en', 1, en_uk_content, self.en_uk_request)
cached_en_uk_content = get_placeholder_cache(self.placeholder, 'en', 1, self.en_uk_request)
cached_en_uk_content = get_placeholder_cache(self.placeholder_en, 'en', 1, self.en_uk_request)
self.assertNotEqual(cached_en_us_content, cached_en_uk_content)

def test_set_get_placeholder_cache_with_long_prefix(self):
Expand All @@ -801,19 +802,19 @@ def test_set_get_placeholder_cache_with_long_prefix(self):
en_crazy_request.META['HTTP_COUNTRY_CODE'] = 'US' * 40 # 80 chars
en_crazy_context = Context({'request': en_crazy_request})
en_crazy_content = en_crazy_renderer.render_placeholder(
self.placeholder,
self.placeholder_en,
en_crazy_context,
language='en',
width=350,
)
set_placeholder_cache(self.placeholder, 'en', 1, en_crazy_content, en_crazy_request)
set_placeholder_cache(self.placeholder_en, 'en', 1, en_crazy_content, en_crazy_request)

# Prove that it is hashed...
crazy_cache_key = _get_placeholder_cache_key(self.placeholder, 'en', 1, en_crazy_request)
crazy_cache_key = _get_placeholder_cache_key(self.placeholder_en, 'en', 1, en_crazy_request)
key_length = len(crazy_cache_key)
# 221 = 180 (prefix length) + 1 (separator) + 40 (sha1 hash)
self.assertTrue('render_placeholder' not in crazy_cache_key and key_length == 221)

# Prove it still works as expected
cached_en_crazy_content = get_placeholder_cache(self.placeholder, 'en', 1, en_crazy_request)
cached_en_crazy_content = get_placeholder_cache(self.placeholder_en, 'en', 1, en_crazy_request)
self.assertEqual(en_crazy_content, cached_en_crazy_content)
Loading
0