link page -> placeholders refactored

This commit is contained in:
Serghei Mihai 2014-04-04 16:38:19 +02:00
parent b1c47a1c49
commit 45d28617db
1 changed files with 14 additions and 9 deletions

View File

@ -6,10 +6,9 @@ from django.core.serializers.json import DjangoJSONEncoder
from cms.models import Page, CMSPlugin, Placeholder, Title
from cms.models.managers import PageManager
from django.core import serializers
from pprint import pprint
exclude_attrs = {'Page': ('site',),
'Placeholder': (),
exclude_attrs = {'Page': ('site', 'id'),
'Placeholder': ('id', ),
'CMSPlugin': (),
'Title': ()
}
@ -39,7 +38,10 @@ class Command(BaseCommand):
)
def _serialize(self, data):
return serializers.serialize('python', data, use_natural_keys=True)
model_name = data.__class__.__name__
model_fields = [field[0].name for field in data._meta.get_fields_with_model()]
fields = set(model_fields) - set(exclude_attrs[model_name])
return serializers.serialize('python', (data,), use_natural_keys=True, fields=fields)
def serialize_page(self, page):
"""
@ -47,7 +49,7 @@ class Command(BaseCommand):
"""
title = page.title_set.get(language=self.options['lang'])
placeholders = page.placeholders.all()
data = self._serialize((page, title)) + self.serialize_placeholders(placeholders)
data = self._serialize(page) + self._serialize(title) + self.serialize_placeholders(placeholders)
for child in page.children.all():
data += self.serialize_page(child)
return data
@ -56,18 +58,21 @@ class Command(BaseCommand):
"""
serialize placeholders and their attached plugins
"""
data = self._serialize(placeholders)
data = []
for placeholder in placeholders:
data += self.serialize_plugins(placeholder.cmsplugin_set.all())
[serialized_placeholder] = self._serialize(placeholder)
serialized_placeholder['fields']['page'] = placeholder.page.natural_key()
data += [serialized_placeholder] + self.serialize_plugins(placeholder.cmsplugin_set.all())
return data
def serialize_plugins(self, plugins):
"""
serialize plugins and sub plugins
"""
data = self._serialize(plugins)
data = []
for plugin in plugins:
data += self.serialize_plugins(plugin.cmsplugin_set.all())
data += self._serialize(plugin) + self.serialize_plugins(plugin.cmsplugin_set.filter(parent__isnull=True))
return data
def handle(self, *args, **options):