Skip to content
This repository has been archived by the owner on Aug 4, 2021. It is now read-only.

Commit

Permalink
Use ToDoPlugin
Browse files Browse the repository at this point in the history
* less debug prints
* code cleanup
  • Loading branch information
jedie committed Feb 24, 2015
1 parent 8872b19 commit 11fab9b
Show file tree
Hide file tree
Showing 12 changed files with 181 additions and 94 deletions.
Expand Up @@ -46,8 +46,9 @@
INSTALLED_APPS += (
'example_project',

# Activate for PyLucid v1.x migration (must be added before 'pylucid' ;)
# Activate for PyLucid v1.x migration
# "pylucid_migration",
# "pylucid_todo",
)


Expand Down
18 changes: 10 additions & 8 deletions pylucid_migration/management/commands/migrate_pylucid.py
Expand Up @@ -24,13 +24,9 @@
from django.core.management.base import BaseCommand
from django.contrib.sites.models import Site
from django.contrib.auth.models import User

import cms
from cms.api import create_page, create_title, add_plugin, get_page_draft
from cms.api import create_page, create_title, get_page_draft
from cms.models import Placeholder

from pylucid_migration.markup.converter import apply_markup
from pylucid_migration.markup.django_tags import PartTag, PartBlockTag, PartLucidTag
from pylucid_migration.models import PageTree, PageMeta, PageContent, DjangoSite
from pylucid_migration.split_content import content2plugins

Expand All @@ -45,8 +41,8 @@ def _migrate_sites(self):
except Site.DoesNotExist:
site_new = Site.objects.create(
pk=site_old.pk,
domain = site_old.domain,
name = site_old.name,
domain=site_old.domain,
name=site_old.name,
)
self.stdout.write("New site %r with ID %i created." % (site_new.name, site_new.id))
else:
Expand Down Expand Up @@ -80,7 +76,13 @@ def _migrate_pylucid(self):
page = pages[pagetree.id]
self.stdout.write("\t * Add in language %r" % pagemeta.language.code)

create_title(pagemeta.language.code, pagemeta.title, page, slug=pagetree.slug)
create_title(
language=pagemeta.language.code,
title=pagemeta.title,
page=page,
slug=pagetree.slug,
meta_description=pagemeta.description,
)
# page.rescan_placeholders()
# page = page.reload()
else:
Expand Down
2 changes: 1 addition & 1 deletion pylucid_migration/markup/converter.py
Expand Up @@ -170,7 +170,7 @@ def markup2html(raw_content, markup_no):
splitted_content = apply_markup(raw_content, markup_no)
html=""
for part in splitted_content:
print(part)
# print(part)
if isinstance(part, PartBlockTag):
html+=part.get_html()
else:
Expand Down
105 changes: 53 additions & 52 deletions pylucid_migration/markup/django_tags.py
@@ -1,6 +1,5 @@
# coding: utf-8


"""
django tag assembler
~~~~~~~~~~~~~~~~~~~~
Expand All @@ -12,29 +11,25 @@
:license: GNU GPL v3 or above, see LICENSE for more details.
"""


import re

import pygments
from pygments import lexers

from django.utils.safestring import mark_safe, mark_for_escaping
from django.utils.six import StringIO

from pylucid_migration.markup.lucidTag import parse_lucidtag


RE_CREOLE_IMAGE=r'(?P<creole_image> {{ .+?(.jpg|.jpeg|.gif|.png).*? }} )'
RE_CREOLE_PRE_INLINE=r'(?P<creole_pre_inline> {{{ (\n|.)*? }}} )'
RE_BLOCK=r'''
RE_CREOLE_IMAGE = r'(?P<creole_image> {{ .+?(.jpg|.jpeg|.gif|.png).*? }} )'
RE_CREOLE_PRE_INLINE = r'(?P<creole_pre_inline> {{{ (\n|.)*? }}} )'
RE_BLOCK = r'''
(?P<block>
\{% \s* (?P<pass_block_start>.+?) .*? %\}
(\n|.)*?
\{% \s* end(?P=pass_block_start) \s* %\}
)
'''
RE_TAG=r'(?P<tag>\{% [^\{\}]*? %\})'
RE_VAR=r'(?P<variable>\{\{ [^\{\}]*? \}\})'
RE_TAG = r'(?P<tag>\{% [^\{\}]*? %\})'
RE_VAR = r'(?P<variable>\{\{ [^\{\}]*? \}\})'


# FIXME: How can we better match on creole image, without a list of known image extensions?
Expand All @@ -46,7 +41,7 @@
RE_VAR,
]), re.VERBOSE | re.UNICODE | re.MULTILINE | re.IGNORECASE)

BLOCK_RE=re.compile(r'''
BLOCK_RE = re.compile(r'''
\{% \s* (?P<pass_block_start>.+?) (?P<args>.*?) %\}
(?P<content>(\n|.)*?)
\{% \s* end(?P=pass_block_start) \s* %\}
Expand All @@ -70,44 +65,48 @@
</fieldset>
"""


class PartBase(object):
content=""
content = ""

def __unicode__(self):
return u"<Part %s: %r>" % (self.kind, self.content)

def __str__(self):
return self.__unicode__()

def __repr__(self):
return self.__unicode__()


class PartText(PartBase):
kind="text"
kind = "text"

def __init__(self, content):
self.content = mark_safe(content)
self.content = content


class PartTag(PartBase):
kind="tag"
def __init__(self, content):
self.content = mark_for_escaping(content)
class PartTag(PartText):
kind = "tag"


class PartBlockTag(PartTag):
kind = "blocktag"

class PartBlockTag(PartBase):
kind="blocktag"
def __init__(self, tag, args, content):
self.tag=tag
self.args=args
self.content = mark_for_escaping(content)
def __init__(self, content, tag, args, block_content):
super(PartBlockTag, self).__init__(content)
self.tag = tag
self.args = args
self.block_content = block_content

def get_pygments_info(self):
assert self.tag == "sourcecode"

source_type = self.args.split('=')[1]
source_type = self.args.strip(""" '".""")
print("source type: %r" % source_type)
# print("source type: %r" % source_type)

content = self.content.strip()
content = self.block_content.strip()

try:
lexer = lexers.get_lexer_by_name(source_type)
Expand All @@ -134,19 +133,20 @@ def __unicode__(self):
return u"<PartBlockTag %s %r %r: %r>" % (self.kind, self.tag, self.args, self.content)


class PartLucidTag(PartBase):
kind="lucidtag"
def __init__(self, plugin_name,method_name,method_kwargs):
self.plugin_name=plugin_name
self.method_name=method_name
self.method_kwargs=method_kwargs
class PartLucidTag(PartTag):
kind = "lucidtag"

def __init__(self, content, plugin_name, method_name, method_kwargs):
super(PartLucidTag, self).__init__(content)
self.plugin_name = plugin_name
self.method_name = method_name
self.method_kwargs = method_kwargs

def __unicode__(self):
return u"<PartLucidTag %r %r %r>" % (self.plugin_name,self.method_name,self.method_kwargs)
return u"<PartLucidTag %r %r %r>" % (self.plugin_name, self.method_name, self.method_kwargs)


class DjangoTagAssembler(object):

def __init__(self):
self.cut_data = []

Expand Down Expand Up @@ -179,7 +179,7 @@ def reassembly(self, text, cut_data):
return text

def reassembly_splitted(self, text):
placeholder_dict={}
placeholder_dict = {}
for no in range(len(self.cut_data) - 1, -1, -1):
placeholder_dict[PLACEHOLDER_CUT_OUT % no] = no

Expand All @@ -191,13 +191,14 @@ def reassembly_splitted(self, text):
splitted = []
for part in data:
if part in placeholder_dict:
no=placeholder_dict[part]
content=self.cut_data[no]
no = placeholder_dict[part]
content = self.cut_data[no]

print(content)
# print(content)
if content.startswith("{% lucidTag"):
plugin_name, method_name, method_kwargs = parse_lucidtag(content)
part=PartLucidTag(
part = PartLucidTag(
content=content,
plugin_name=plugin_name,
method_name=method_name,
method_kwargs=method_kwargs,
Expand All @@ -207,11 +208,12 @@ def reassembly_splitted(self, text):
else:
match = BLOCK_RE.match(content)
if match:
print(match.groupdict())
# print(match.groupdict())
part = PartBlockTag(
content=content,
tag=match.group("pass_block_start"),
args=match.group("args").strip(),
content=match.group("content")
block_content=match.group("content")
)
else:
part = PartTag(content=content)
Expand All @@ -226,11 +228,10 @@ def reassembly_splitted(self, text):
return splitted



if __name__=="__main__":
if __name__ == "__main__":
from pprint import pprint

content="""
content = """
text 1
{% TagOne %}
tag one content 1
Expand All @@ -248,14 +249,14 @@ def reassembly_splitted(self, text):
{% lucidTag PluginName.MethodName kwarg1="value1" kwarg2="value2" %}
"""

# content="""
# pre text
# {% sourcecode ext=".py" %}
# print "Python is cool!"
# {% endsourcecode %}
# post text
# here a {{ variable }} and a {% inline tag %} too...
# """
# content="""
# pre text
# {% sourcecode ext=".py" %}
# print "Python is cool!"
# {% endsourcecode %}
# post text
# here a {{ variable }} and a {% inline tag %} too...
# """

# content="{% lucidTag SiteMap %}"

Expand Down
51 changes: 19 additions & 32 deletions pylucid_migration/split_content.py
Expand Up @@ -14,40 +14,31 @@

from __future__ import unicode_literals

from pprint import pprint
import traceback

import pygments
from pygments import lexers

from django.core.management.base import BaseCommand
from django.contrib.auth.models import User

import cms
from cms.api import create_page, create_title, add_plugin, get_page_draft
from cms.models import Placeholder
from cms.api import add_plugin

from pylucid_migration.markup.converter import markup2html
from pylucid_migration.markup.django_tags import PartTag, PartBlockTag, PartLucidTag
from pylucid_migration.models import PageTree, PageMeta, PageContent
from pylucid_migration.markup.django_tags import PartText, PartTag, PartBlockTag, PartLucidTag


def _add_todo(placeholder, language, content):
print("\t +++ Add TODO Plugin for: %r" % content)
add_plugin(placeholder, "ToDoPlugin", language, code=content)

def content2plugins(placeholder,raw_content, markup, language):

def content2plugins(placeholder, raw_content, markup, language):
html, splitted_content = markup2html(raw_content, markup)
# pprint(splitted_content)
print(",".join([part.kind for part in splitted_content]))
# print(",".join([part.kind for part in splitted_content]))

for part in splitted_content:
content = part.content
if isinstance(part, PartLucidTag):
plugin_name = part.plugin_name
method_name = part.method_name
method_kwargs = part.method_kwargs
content = "TODO: lucidTag: %r %r %r" % (plugin_name, method_name, method_kwargs)
html += content
print("\t +++ %s" % content)
add_plugin(placeholder, "TextPlugin", language, body=content)
# plugin_name = part.plugin_name
# method_name = part.method_name
# method_kwargs = part.method_kwargs
# content = "TODO: lucidTag: %r %r %r" % (plugin_name, method_name, method_kwargs)
# html += content
_add_todo(placeholder, language, content)

elif isinstance(part, PartBlockTag):
tag = part.tag
Expand All @@ -68,22 +59,18 @@ def content2plugins(placeholder,raw_content, markup, language):
)
print("\t\t *** created with %r" % lexer.aliases[0])
else:
print("\t *** TODO: BlockTag %r !" % tag)
# TODO
content = "TODO: %s" % content
add_plugin(placeholder, "TextPlugin", language, body=content)
_add_todo(placeholder, language, content)

elif isinstance(part, PartTag):
print("\tTag content: %r" % content)
if content == "{% lucidTag SiteMap %}":
print("\t *** create 'HtmlSitemapPlugin' page ")
add_plugin(placeholder, "HtmlSitemapPlugin", language)
else:
# TODO:
content = "TODO PartTag: %s" % content
print("\t *** %s" % content)
add_plugin(placeholder, "TextPlugin", language, body=content)
else:
_add_todo(placeholder, language, content)
elif isinstance(part, PartText):
add_plugin(placeholder, "TextPlugin", language, body=content)
else:
raise NotImplementedError(repr(part))

return html
Empty file added pylucid_todo/__init__.py
Empty file.
21 changes: 21 additions & 0 deletions pylucid_todo/admin.py
@@ -0,0 +1,21 @@
# coding: utf-8

"""
PyLucid ToDo Plugin
~~~~~~~~~~~~~~~~~~~
:copyleft: 2015 by the PyLucid team, see AUTHORS for more details.
:created: 2015 by JensDiemer.de
:license: GNU GPL v3 or above, see LICENSE for more details.
"""


from django.contrib import admin

from pylucid_todo.models import ToDoPlugin


class ToDoPluginAdmin(admin.ModelAdmin):
list_display = ("id", "code")

admin.site.register(ToDoPlugin, ToDoPluginAdmin)

0 comments on commit 11fab9b

Please sign in to comment.